我要搜索用户输入我的数据库。数据库归类为latin1_swedish_ci
。我不想改变这种状况,反而会更改用户输入utf-8
到latin1_swedish_ci
?
编辑:
我走近两种方法。
方法1:我进口和使用的默认排序规则latin1_swedish_ci
和字符集latin1
。然后,我有
在这里,我可以查询像SELECT * FROM dict WHERE english_word = '$_value'
和我,包括根据需要在浏览器malayalam_definition列的所有值。但问题是我无法查询像SELECT * FROM dict WHERE malayalam_definition = '$_value'
。它不返回结果。
方法2:我改变排序规则utf8_unicode_ci
和字符集utf8
。然后在mysql中我得到这样的期望值
在这里,我当我查询像在浏览器SELECT * FROM dict WHERE english_word = '$_value'
我得到问号像malayalam_definition
值
SHOW VARIABLES LIKE 'character\_set\_%';
结果
+--------------------------+--------+
| Variable_name | Value |
+--------------------------+--------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | latin1 |
| character_set_system | utf8 |
+--------------------------+--------+
7 rows in set (0.00 sec)
我需要改变character_set_server
,那该怎么办呢?
首先,在“数据库排序规则”只是一个默认值。真正的问题是什么是你感兴趣的列的CHARACTER SET
。
那么,什么是您的客户端的字节?他们是否编码为latin1
?或utf8
?在这两种情况下,告诉MySQL那这就是在它的到来。这优选地在连接参数来完成。 (什么是你的客户端语言?)或者,使用SET NAMES latin1
或SET NAMES utf8
,根据客户端编码。
现在,MySQL将做INSERT
和SELECT
......它会从客户端的编码的编码为你做一个INSERT
转换为列的编码。无需采取进一步的行动来实现这一目标。
同样,MySQL将一个SELECT
在其他的方式转换。
(当然,如果列和客户端所谈论相同的编码,没有“转换”是需要的。)
你的问题中提到“整理”。到目前为止,我只谈过CHARACTER SETs
,也被称为“编码”。与此相反,排序和两串比较 - 这是COLLATION
。
对于CHARACTER SET
latin1
,默认COLLATION
是latin1_swedish_ci
。
对于CHARACTER SET
utf8
,默认COLLATION
是utf8_general_ci
。
有几种不同的“归类”处理德语或土耳其语,西班牙语或者(等)排序的怪癖。
请解释为什么你正在尝试做的,你说什么。有很多方法,你可以这样做不对,所以我不想给你一个ALTER
声明 - 它可能只是使事情真正的目标差。
这是更好地改用UTF8的utf8mb4。外界指UTF-8
;这相当于MySQL的utf8mb4
。
编辑(后OP的编辑)
第一个截图显示了“变为乱码”。另一个截图显示问号。每个的原因被覆盖在Trouble with UTF-8 characters; what I see is not what I stored