我可以将用户输入的语言为默认的数据库排序规则?

问题描述 投票:0回答:1

我要搜索用户输入我的数据库。数据库归类为latin1_swedish_ci。我不想改变这种状况,反而会更改用户输入utf-8latin1_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,那该怎么办呢?

mysql collation
1个回答
0
投票

首先,在“数据库排序规则”只是一个默认值。真正的问题是什么是你感兴趣的列的CHARACTER SET

那么,什么是您的客户端的字节?他们是否编码为latin1?或utf8?在这两种情况下,告诉MySQL那这就是在它的到来。这优选地在连接参数来完成。 (什么是你的客户端语言?)或者,使用SET NAMES latin1SET NAMES utf8,根据客户端编码。

现在,MySQL将做INSERTSELECT ......它会从客户端的编码的编码为你做一个INSERT转换为列的编码。无需采取进一步的行动来实现这一目标。

同样,MySQL将一个SELECT在其他的方式转换。

(当然,如果列和客户端所谈论相同的编码,没有“转换”是需要的。)

你的问题中提到“整理”。到目前为止,我只谈过CHARACTER SETs,也被称为“编码”。与此相反,排序和两串比较 - 这是COLLATION

对于CHARACTER SET latin1,默认COLLATIONlatin1_swedish_ci。 对于CHARACTER SET utf8,默认COLLATIONutf8_general_ci。 有几种不同的“归类”处理德语或土耳其语,西班牙语或者(等)排序的怪癖。

请解释为什么你正在尝试做的,你说什么。有很多方法,你可以这样做不对,所以我不想给你一个ALTER声明 - 它可能只是使事情真正的目标差。

这是更好地改用UTF8的utf8mb4。外界指UTF-8;这相当于MySQL的utf8mb4

编辑(后OP的编辑)

第一个截图显示了“变为乱码”。另一个截图显示问号。每个的原因被覆盖在Trouble with UTF-8 characters; what I see is not what I stored

© www.soinside.com 2019 - 2024. All rights reserved.