mysql 插入时出现 unicode 文本不正确的字符串警告,尽管字符集变量设置为 utf8mb4
mysql unicode text incorrect string warning on insert, despite character set variables set utf8mb4
首先,我知道,是的,这是另一个 mysql unicode 问题。
问题:我无法将 unicode 文本插入我的 mysql 数据库
我想执行以下查询:
INSERT INTO usert SET username='田中'
当我这样做时,我收到此警告:
Incorrect string value: '\x93c\x92\x86' for column 'username' at row 1
空白 space 被插入 table 而不是数据
我尝试了尽可能多的答案和论坛,我相信所有适当的变量,table,和列设置都设置为 'utf8mb4' 字符集,排序规则 'utf8mb4_general_ci' 或 'utfmb4_unicode_ci'
我会通过向您提供详细信息和用于显示它们的 sql 命令来告诉您为什么我相信这一点。
第一,mysql版本:
mysql:> SHOW VARIABLES LIKE 'version'
确认版本为5.6.23
显示mysql中的字符集变量:
mysql:> SHOW VARIABLES LIKE '%char%'
该命令显示(格式略有不同):
character_set_client: utf8mb4
character_set_connection: utf8mb4
character_set_database: utf8mb4
...
character_set_results: utf8mb4
character_set_server: utf8mb4
character_set_system: utf8
整理:
mysql:> SHOW VARIABLES LIKE '%collat%'
结果:
collation_connection: utf8mb4_unicode_ci
collation_database: utf8mb4_unicode_ci
collation_server: utf8mb4_unicode_ci
到目前为止还好吗?
现在,对于 table 字符集和排序规则:
查看table详情命令:
mysql:> SHOW TABLE STATUS
显示排序规则是utf8mb4_general_ci
查看列详细信息的命令:
mysql:> SHOW FULL COLUMNS IN usert
确认列 'username' 的排序规则是 utf8mb4_general_ci
综上所述,根据我的研究,所有相关变量、数据库、table和列设置似乎都设置为相关的 utf8mb4 设置。尽管如此,我还是无法插入 unicode 日文文本。
(顺便说一句,我认为这里不需要 4 字节的 unicode 设置 utf8mb4,但我正在使用它,因为它似乎解决了许多其他 unicode mysql 问题)
mysql 或系统中的哪些其他设置可能导致此问题?
我可以/应该更改哪些其他设置以允许适当地插入日文文本?
编辑更新:我在日本电脑上
问题是默认的系统设置,这也影响了命令行的输入设置。
这是一台日本计算机,显然默认使用 shift-jis 编码,而不是 unicode。我输入的文本是以这种方式编码的,并且在我尝试使用的类似输入文件中。
因此,我在服务器中设置字符集为'jsis',
即在 my.ini 初始化文件中设置 character-set-server=sjis
,并通过在同一初始化文件中输入 skip-character-set-client-handshake
将 mysql 字符集设置为相同。
列的字符集当然也必须通过
更改
ALTER TABLE usert MODIFY username varchar(30) CHARACTER SET sjis COLLATE sjis_japanese_ci
现在,您可以从命令行插入日文文本,以及使用 shift-jis 编码的其他日文文件。
另一个输入日文的选项似乎是 cp932,它是 shift-jis 的 windows 版本。
顺便说一句,如果您确实希望通过命令行使用 unicode,显然 powershell 对它有更好的支持,而不是我使用的普通 cmd,但我还没有亲自尝试过。
尝试检查数据库的字符集。
- 使用以下命令检查数据库的字符集:
SELECT @@character_set_database, @@collation_database;
- 如果结果为 1 个不同的 UTF-8,则尝试以下命令:
ALTER DATABASE yourDatabase CHARACTER SET utf8 COLLATE
utf8_unicode_ci;
希望对你有用。
首先,我知道,是的,这是另一个 mysql unicode 问题。
问题:我无法将 unicode 文本插入我的 mysql 数据库
我想执行以下查询:
INSERT INTO usert SET username='田中'
当我这样做时,我收到此警告:
Incorrect string value: '\x93c\x92\x86' for column 'username' at row 1
空白 space 被插入 table 而不是数据
我尝试了尽可能多的答案和论坛,我相信所有适当的变量,table,和列设置都设置为 'utf8mb4' 字符集,排序规则 'utf8mb4_general_ci' 或 'utfmb4_unicode_ci'
我会通过向您提供详细信息和用于显示它们的 sql 命令来告诉您为什么我相信这一点。
第一,mysql版本:
mysql:> SHOW VARIABLES LIKE 'version'
确认版本为5.6.23
显示mysql中的字符集变量:
mysql:> SHOW VARIABLES LIKE '%char%'
该命令显示(格式略有不同):
character_set_client: utf8mb4
character_set_connection: utf8mb4
character_set_database: utf8mb4
...
character_set_results: utf8mb4
character_set_server: utf8mb4
character_set_system: utf8
整理:
mysql:> SHOW VARIABLES LIKE '%collat%'
结果:
collation_connection: utf8mb4_unicode_ci
collation_database: utf8mb4_unicode_ci
collation_server: utf8mb4_unicode_ci
到目前为止还好吗?
现在,对于 table 字符集和排序规则:
查看table详情命令:
mysql:> SHOW TABLE STATUS
显示排序规则是utf8mb4_general_ci
查看列详细信息的命令:
mysql:> SHOW FULL COLUMNS IN usert
确认列 'username' 的排序规则是 utf8mb4_general_ci
综上所述,根据我的研究,所有相关变量、数据库、table和列设置似乎都设置为相关的 utf8mb4 设置。尽管如此,我还是无法插入 unicode 日文文本。
(顺便说一句,我认为这里不需要 4 字节的 unicode 设置 utf8mb4,但我正在使用它,因为它似乎解决了许多其他 unicode mysql 问题)
mysql 或系统中的哪些其他设置可能导致此问题? 我可以/应该更改哪些其他设置以允许适当地插入日文文本?
编辑更新:我在日本电脑上
问题是默认的系统设置,这也影响了命令行的输入设置。
这是一台日本计算机,显然默认使用 shift-jis 编码,而不是 unicode。我输入的文本是以这种方式编码的,并且在我尝试使用的类似输入文件中。
因此,我在服务器中设置字符集为'jsis',
即在 my.ini 初始化文件中设置 character-set-server=sjis
,并通过在同一初始化文件中输入 skip-character-set-client-handshake
将 mysql 字符集设置为相同。
列的字符集当然也必须通过
更改ALTER TABLE usert MODIFY username varchar(30) CHARACTER SET sjis COLLATE sjis_japanese_ci
现在,您可以从命令行插入日文文本,以及使用 shift-jis 编码的其他日文文件。
另一个输入日文的选项似乎是 cp932,它是 shift-jis 的 windows 版本。
顺便说一句,如果您确实希望通过命令行使用 unicode,显然 powershell 对它有更好的支持,而不是我使用的普通 cmd,但我还没有亲自尝试过。
尝试检查数据库的字符集。
- 使用以下命令检查数据库的字符集:
SELECT @@character_set_database, @@collation_database;
- 如果结果为 1 个不同的 UTF-8,则尝试以下命令:
ALTER DATABASE yourDatabase CHARACTER SET utf8 COLLATE utf8_unicode_ci;
希望对你有用。