MySQL Chinesse标志着从拉丁到utf-8的转换

时间:2017-01-30 15:52:42

标签: mysql utf-8

我有从拉丁语到utf-8转换的MySQL中文标记的问题。

我设置了所有变量

ALTER DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

SET CHARACTER SET utf8mb4;
SET NAMES utf8mb4;

之后我执行脚本:

select id,convert(binary convert(`address` using latin1) using utf8mb4),address from users where id = 11111;

我收到了很好的结果:

'11111','一二三四五','一二三å>>亓'

所以现在我想更新这一行,所以我执行:

UPDATE `users` SET `address` = convert(binary convert(`address` using latin1) using utf8mb4) where id = 11111;

但在输出中我得到了信息:

1 row(s) affected, 1 warning(s): 1366 Incorrect string value: '\xE4\xB8\x80\xE4\xBA\x8C...' for column 'address' at row 1 Rows matched: 1  Changed: 1  Warnings: 1

然后我选择该用户的地址:'?????????''

请帮忙,

此致

1 个答案:

答案 0 :(得分:2)

您观察到的行为(这里只是猜测)最可能的解释是列address的字符集。

列定义包括列的字符集。如果在创建列时未指定字符集,则将其设置为表的默认字符集。如果在创建表时未指定表的默认字符集,则它将被设置为数据库的默认字符集。

ALTER DATABASE mydb CHARACTER SET语句对已创建的表和列没有任何影响。指定的字符集将应用于未指定默认字符集的任何新创建的表。

我们可以SHOW CREATE TABLE users查看address列的字符集。

一点也不清楚你想要达到的目的。