我刚刚在MariaDB上安装了Amazon EC2 linux实例。 当尝试在db命令行中输入重音字符(如â,é等)时,它不允许我。 我无法弄清楚出了什么问题。 bash命令行允许它们没有问题。
更新:
也许我没有很好地解释这个问题。因为我是西班牙语,所以我非常习惯在每个应用程序中编写重音字符。我可以把它们写成各种编辑器,包括vim或nano。 Bash显然允许他们。但是当登录MariaDB(db命令行(MariaDB [adatabase]>))时,我无法输入任何带重音的字母。这只发生在我在Amazon EC2实例中安装的MariaDB中,而不是在我自己的计算机中安装的另一个MariaDB数据库中(用于测试目的)。
这个问题的一个新信息是,使用PHP(mysqli_connect函数),我可以插入或更新带有重音字符串的行,没有问题。因此,只有MariaDB命令行不允许我输入带有重音字母的数据。再说一遍:并不是这些字母没有出现在数据库中,但我甚至无法在命令行中输入它们。
我添加了:
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mariadb/mariadb.log
pid-file=/run/mariadb/mariadb.pid
collation-server = utf8mb4_unicode_ci
init-connect='SET NAMES utf8mb4'
character-set-server = utf8mb4
到mariadb-server.cnf
文件,
[client]
default-character-set=utf8mb4
到client.cnf
文件,这两个文件都在/etc/my.cnf.d
文件夹中,但没有解决方案。
答案 0 :(得分:0)
您是否已确定连接为UTF-8?还是Bash甚至使用它?
您是否已将列声明为CHARACTER SET utf8mb4
?还是什么?
请参见“最佳做法”和各种常见故障案例的诊断信息here。
更多
init-connect
(在my.cnf中)被用户root
忽略。确保不要将root
(或其他SUPER
用户)用于应用程序工作。
我不知道(我怀疑您不知道)bash,vim,nano和其他编辑器使用什么编码。它可以(应该)是UTF-8。但这可能是latin1或所有其他太多编码中的任何一种,其中大多数都非常乐于处理西班牙语和西欧其他语言的所有带重音的字母。
如果您能以某种方式获得ñ
的十六进制,我们可以进行更深入的研究。如果得到单个字符十六进制F1
,则它是cp1250,cp1257,dec8,latin1,latin2,latin5,latin7之一。如果您使用的是十六进制C3B1
,则它是utf8或utf8mb4(在MySQL中为名称)或UTF-8(由其他所有人命名)。
西班牙语字符
chars: áéíñóúü
ÁÉÍÑÓÚÜ
¿¡€’“”«»–—
latin1: E1 E9 ED F1 F3 FA FC
C1 C9 CD D1 D3 DA DC
BF A1 80 92 93 94 AB BB 96 97
UTF-8: C3A1 C3A9 C3AD C3B1 C3B3 C3BA C3BC
C381 C389 C38D C391 C393 C39A C39C
C2BF C2A1 E282AC E28099 E2809C E2809D C2AB C2BB E28093 E28094
CMD(在Windows中)
命令“ chcp”控制“代码页”。 chcp 65001提供utf8,但也需要安装特殊的字符集。参见some code pages。 要在控制台窗口中设置字体,请执行以下操作:右键单击窗口标题→属性→字体→选择Lucida Console
$ mysql
https://stackoverflow.com/a/6788223/1766831建议(对utf8mb4
更新):
mysql --default-characterset=utf8mb4
和(或)
[mysql]
default-character-set = utf8mb4
请注意,它是[mysql]
,而不是[mysqld]
。