MySQL中文标记从拉丁到utf-8的转换

MySQL中文标记从拉丁到utf-8的转换,mysql,utf-8,Mysql,Utf 8,我对MySQL中文标记从拉丁到utf-8的转换有问题 我设置了所有变量 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 u

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

我设置了所有变量

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
然后,我为我得到的用户选择地址:‘??????‘

请帮忙


关于

对于您观察到的行为,最有可能的解释(这里只是猜测)是列
地址
的字符集

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

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


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


根本不清楚您试图实现什么。

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

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

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


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


根本不清楚你想达到什么目的。

Latin-1根本无法编码中文。你想做什么?@lvaroGonzález我想把拉丁文1转换成utf-8,我有中文标记,所以我想转换。但我不知道为什么select打印的结果很好,但更新有警告并添加了“??”。通常,特定列的字符集被显式设置为
latin1
。您必须转换列的编码。
数据库
设置只是一个默认设置,以防表/列没有。如果我没有正确解释我自己,很抱歉。那些好结果(
'11111','一二 三四五', 'äääääääå››ääääääääå›ääää。除了看起来像胡言乱语,
四五
不能是正确编码的Latin-1字符串的内容,因为Latin-1的字符目录非常有限,没有单个表意文字(请参阅)。你是在试图修复编码错误的数据吗?@lvaroGonzález那么,当拉丁语1是“ääääääääääääääääääääääääää。你想做什么?@lvaroGonzález我想把拉丁文1转换成utf-8,我有中文标记,所以我想转换。但我不知道为什么select打印的结果很好,但更新有警告并添加了“??”。通常,特定列的字符集被显式设置为
latin1
。您必须转换列的编码。
数据库
设置只是一个默认设置,以防表/列没有。如果我没有正确解释我自己,很抱歉。那些好结果(
'11111','一二 三四五', 'äääääääå››ääääääääå›ääää。除了看起来像胡言乱语,
四五
不能是正确编码的Latin-1字符串的内容,因为Latin-1的字符目录非常有限,没有单个表意文字(请参阅)。你是在试图修复编码错误的数据吗?@lvaroGonzález那么,当latin1为“ääääääääääääääääääääääääääääää228
works.correct
ALTER表用户转换为字符集utf8mb4校对utf8mb4\u常规\u ci工作。