标签: character-set

我是否需要使用 NVARCHAR 而不是 VARCHAR 来在 Oracle 中正确存储 UTF8 字符?

我希望我的 Oracle 数据库能够正确存储所有可能的 UTF8 字符。如果 NLS_CHARSET 设置为 AL32UTF8 就是我需要做的全部吗?或者我是否还需要确保使用 NCHAR 和 NVARCHAR 而不是 CHAR 和 VARCHAR 来正确存储 UTf8 字符?

oracle character-set

6
推荐指数
1
解决办法
1万
查看次数

为什么有不同级别的 MySQL 排序规则/字符集?

查看 MySQL 服务器变量,服务器和数据库排序规则设置为 latin1_swedish_ci,但 collaction_connection 为 utf8_general_ci。此外,排序规则/字符集设置在多个级别:服务器、数据库、表和列。您还需要考虑 PHP MySQL 连接的字符集。

我的问题有四点:

  1. 为什么有不同级别的 MySQL 排序规则/字符集?是这样你就可以混合你的字符集来满足你的需要吗?如果我错了,请纠正我,但 utf8 似乎是一般用途的最佳字符集,那么为什么我使用的大多数 LAMP 设置都默认使用 latin1?

  2. 您是否应该始终确保您的 PHP 连接与您正在处理的数据库的字符集相匹配?

  3. 如果您可以拥有使用不同字符集的不同表,您是否只使用 SET NAMES 或 mysql(i)_set_charset 来切换?

  4. 如果您有一个包含多个字符集的表,您如何管理它,因为连接一次只能使用一个字符集?

非常感谢。

编辑:

关于评论:

“您可以使用任一种,前者仅用于设置结果字符集,后者用于设置 PHP 内部编码以用于 mysqli_real_escape_string 和结果编码。”

我以为你不打算一起使用 real_escape_string 和 SET NAMES 。见:http : //www.php.net/manual/en/mysqlinfo.concepts.charset.php

mysql collation php character-set

6
推荐指数
1
解决办法
2859
查看次数

MySQL 默默地将 UTF 字符替换为文字问号

我遇到了类似于这个问题的情况,即我正在使用一个旧数据库,该数据库在 latin1 表中包含 UTF8 内容(我知道非常难看)。

\n\n

现在我正在从一个完全 utf8 的新应用程序获取新数据,并与其数据库一起使用。为了支持其他遗留系统,应用程序还在遗留表中写入其 utf8 数据的副本。据我所知,只要您读回并将这些数据显示为 UTF8,就应该可以在 latin1 表中写入 utf8 内容。有很多教程解释了如何长期解决这种情况,但我宁愿不应用它们,除非绝对必要(遗留系统将很快被解雇,我不希望有停机时间来解决这个问题,如果可能的)

\n\n

这是一个最小的 SQL 脚本,它重现了我的问题:

\n\n
CREATE TABLE `articles` (\n  `content` mediumtext NOT NULL,\n  FULLTEXT KEY `content` (`content`)\n) ENGINE=MyISAM DEFAULT CHARSET=latin1;\n\nSET NAMES utf8;\nSET CHARACTER SET utf8;\n-- Turkish word for Croatia, second char is \\xC4\\xB1\nINSERT INTO `articles` (`content`) VALUES (\'H\xc4\xb1rvatistan\');\n
Run Code Online (Sandbox Code Playgroud)\n\n

在我的系统中,我没有从 MySQL 收到错误,但在INSERT语句之后,该单词的第二个字符被默默删除并替换为文字?(\'\\x3F\')。

\n\n
mysql> SELECT content, HEX(content), HEX(\'H\xc4\xb1rvatistan\') FROM articles;\n+-------------+------------------------+--------------------------+\n| content     | HEX(content)           | HEX(\'H\xc4\xb1rvatistan\')       |\n+-------------+------------------------+--------------------------+\n| …
Run Code Online (Sandbox Code Playgroud)

mysql character-set utf-8 encoding

6
推荐指数
1
解决办法
2万
查看次数

转换字符集和外键约束

我正在尝试将 MySQL 数据库以及所有包含表的字符集和排序规则从utf8 / utf8_unicode_ci转换为utf8mb4 / utf8mb4_unicode_ci

我将我的数据库名称称为:MyDB
我将我的表称为:MyTable1 [、MyTable2MyTable3等]

我已经使用以下命令设置了数据库字符集和排序规则:

ALTER DATABASE MyDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Run Code Online (Sandbox Code Playgroud)

然后我使用这个 SQL 脚本生成所有表命令:

SELECT CONCAT("ALTER TABLE ",TABLE_SCHEMA,".",TABLE_NAME," CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ",
    "ALTER TABLE ",TABLE_SCHEMA,".",TABLE_NAME," CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ") 
    AS alter_sql
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'MyDB';
Run Code Online (Sandbox Code Playgroud)

此 SQL 生成了一个包含以下内容的表:

ALTER TABLE MyDB.MyTable1 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE MyDB.MyTable1 CONVERT TO CHARACTER SET utf8mb4 …
Run Code Online (Sandbox Code Playgroud)

mysql foreign-key collation character-set

6
推荐指数
1
解决办法
6628
查看次数

将字符集 utf8mb4 的默认排序规则更改为 utf8mb4_unicode_ci

在不指定字符集或排序规则的情况下创建数据库时,将使用服务器默认值(如预期)。

MariaDB [(none)]> SHOW VARIABLES LIKE '%_server' ;
+----------------------+--------------------+
| Variable_name        | Value              |
+----------------------+--------------------+
| character_set_server | utf8mb4            |
| collation_server     | utf8mb4_unicode_ci |
+----------------------+--------------------+

MariaDB [(none)]> CREATE DATABASE `test-without-charset` ;
MariaDB [(none)]> SELECT `DEFAULT_COLLATION_NAME` FROM `information_schema`.`SCHEMATA` WHERE `SCHEMA_NAME` LIKE 'test-without-charset';
+------------------------+
| DEFAULT_COLLATION_NAME |
+------------------------+
| utf8mb4_unicode_ci     |
+------------------------+
Run Code Online (Sandbox Code Playgroud)

但是,在CREATE DATABASE-query 中指定字符集时,默认排序规则更改为utf8mb4_general_ci.

MariaDB [(none)]> CREATE DATABASE `test-with-charset` CHARACTER SET utf8mb4 ;
MariaDB [(none)]> SELECT `DEFAULT_COLLATION_NAME` FROM `information_schema`.`SCHEMATA` WHERE `SCHEMA_NAME` LIKE 'test-with-charset';
+------------------------+
| DEFAULT_COLLATION_NAME …
Run Code Online (Sandbox Code Playgroud)

mariadb collation character-set mariadb-10.3

6
推荐指数
1
解决办法
8731
查看次数

5
推荐指数
1
解决办法
8127
查看次数

查询特殊字符

我使用带有特殊字符的语言(例如:e -> é)。我有一个带有 a 的查询,LIKE但是当我搜索一个带有特殊字符的单词并且我的查询没有特殊字符时,我没有得到我期望的结果:

select * from a where name like '%e%'
Run Code Online (Sandbox Code Playgroud)

当数据库包含“dés”时,上述内容不返回任何结果。有没有办法让这个查询返回所需的结果。

ms-access query character-set

5
推荐指数
1
解决办法
1824
查看次数

是否有任何文档列出标准 <=> Oracle 字符集对应关系?

我正在寻找一个列出 Oracle 和“标准”字符集的表,例如:

Oracle       Standard
------------ ----------
WEISO98859P1 iso-8859-1
AL32UTF8     utf-8
etc.         etc.
Run Code Online (Sandbox Code Playgroud)

有这种资源吗?我找不到任何。

oracle character-set

5
推荐指数
1
解决办法
8209
查看次数

无法在 mysql 5.6 中插入 utf8mb4 字符

最近我在我的 mysql 数据库中插入表情符号和其他 4 字节字符时遇到问题然后我发现我的 mysql 版本是 5.1 并且它不支持 utf8mb4 所以我升级到支持 utf8mb4 的 mysql 5.6 并且在我的整理中我可以选择选择 utf8mb4.but 当我尝试通过 phpmyadmin 直接插入表格行时,我也收到了这个错误,也提到了这个链接

       http://dba.stackexchange.com/questions/59126/set-value-of-character-set-client-to-utf8mb4


 1 row affected.
      Warning: #1366 Incorrect string value: '\xF0\x9F\x9A\x8A k...' for column 'rajulp' at row 1
Run Code Online (Sandbox Code Playgroud)

我用谷歌搜索,发现这是因为数据库不支持 utf8mb4 字符,然后我在互联网上遵循了一些教程来更新 my.cnf 文件并重新启动 mysql 服务器和服务器。

       https://mathiasbynens.be/notes/mysql-utf8mb4
Run Code Online (Sandbox Code Playgroud)

我尝试了几乎所有可能的组合,但是当我在 sql 中输入它时,它会抛出最大值为 utf8,因为我无法插入 eboji 和几个 4 字节字符。

 Punjab me 1Train k niche 100 Sardar aa gaye..
Run Code Online (Sandbox Code Playgroud)

以下命令在 mysql 中的输出

 SHOW VARIABLES LIKE 'char%'


  character_set_client  utf8
     character_set_connection   utf8
   character_set_database   utf8mb4
    character_set_filesystem    binary
    character_set_results   utf8
   character_set_server …
Run Code Online (Sandbox Code Playgroud)

mysql character-set mysql-5.6

5
推荐指数
2
解决办法
2万
查看次数

转储表列名中的特殊字符

我正在接管一个旧数据库,在从我的转储中进行恢复测试时,我发现一个表被错误地备份,表定义被截断。

查看实时数据库,我发现了一个名称中带有特殊字符的列名。即列名Località

我当前的 mysql 转储产生以下内容:

/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `contabilita_banche` (
  `ID_Banca` int(6) unsigned NOT NULL default '0',
  `Descrizione` varchar(70) default NULL,
  `Località;
/*!40101 SET character_set_client = @saved_cs_client */;
Run Code Online (Sandbox Code Playgroud)

第一个问题是表并没有到此结束,Località后面还有其他字段,所以结构转储不完整。除此之外,转储不会引发任何错误,并且数据会正确转储到最后。

我尝试了几个命令,都没有成功:

mysqldump -r /tmp/cbnew2.sql --default-character-set=latin1 --no-tablespaces --skip-lock-tables --quick -u root -p -h host Dbname contabilita_banche
mysqldump -r /tmp/cbnew2.sql --default-character-set=utf8 --no-tablespaces --skip-lock-tables --quick -u root -p -h host Dbname contabilita_banche
Run Code Online (Sandbox Code Playgroud)

服务器版本是 …

mysql mysqldump character-set mysql-4

5
推荐指数
1
解决办法
1319
查看次数