我试图在我的数据库中使用重音来保护西班牙语单词,但它不起作用,我已经尝试过:
1)将表格和行的连接更改为(n+1) . (1/(n+1))
和utf8_spanish_ci
2)添加带
的标头标签utf_unicode_ci.
3)添加
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
在php标签中。
在我的笔记本电脑的xampp服务器中执行此操作会有效,但是当我将数据库上传到登录怪物服务器时,它不会正确保存重音。
编辑:这是我正在使用的连接:
header("Content-Type: text/html;charset=utf-8");
编辑:
我无法保存口音,它显示像á=á
这样的奇怪字符答案 0 :(得分:5)
排序仅影响文本排序,对存储数据的实际字符集没有影响。
我会推荐这种配置:
仅设置整个数据库的字符集,因此您不必分别为每个表设置它。字符集从DB继承到表到列。使用utf8
作为字符集。
设置数据库连接的字符集。连接到数据库后执行这些查询:
SET CHARACTER SET 'utf8'
SET NAMES 'utf8'
使用HTTP标头和/或HTML元标记设置页面的字符集。其中一个就足够了。使用utf-8
作为charset
。
这应该足够了。
如果要对西班牙语字符串进行适当排序,请为整个数据库设置 collation 。 utf8_spanish_ci
应该有效(ci
表示不区分大小写)。如果没有适当的整理,重音西班牙语字符将始终排序。
注意:表中已有的数据字符集可能已损坏,因为之前字符集配置错误。您应首先使用某个数据库客户端进行检查以排除此情况。如果它坏了,只需使用正确的字符集配置重新插入数据。
objects有一个字符集属性,可以明确设置或继承(服务器&gt;数据库&gt; table&gt;列),所以最好的选择是为整个数据库设置它
client connection还有一个字符集属性,它告诉数据库你要发送数据的编码
如果客户端连接和目标对象的字符集不同,则发送到数据库的数据会自动从连接的字符集转换为对象的字符集。
因此,如果您有utf8
中的数据,但客户端连接设置为latin1
,则数据库将中断数据,因为它会尝试转换utf8
喜欢latin1
。
答案 1 :(得分:2)
这是我存储UTF8字符的清单。但是,请确保将存储字符串的部分的失败原因隔离到数据库中 - 这意味着要存储的字符串仍然与用户输入的字符串相同。
首先。确保正在使用的表格的字符集为utf8
或更好,但使用utf8mb4
来获得完整的unicode支持(尽管它也有它的缺点)。为整个数据库设置了哪个字符集并不重要;如果指定,它将被表定义覆盖。用于创建此类表的DDL代码如下:
CREATE TABLE table_name (
id INT AUTO_INCREMENT NOT NULL,
name VARCHAR(190) NOT NULL,
date_created DATETIME NOT NULL,
PRIMARY KEY(id)
)
DEFAULT CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci
ENGINE = InnoDB;
其次。使用utf8
字符集进行数据库连接。
// This should be enough
new PDO(
'mysql:host=localhost;dbname=xxxxx;charset=utf8mb4;',
'username',
'password'
);
答案 2 :(得分:0)
For MySql在调用数据库连接后使用这些代码:
$set_utf=$dbh->exec("SET NAMES UTF8");
答案 3 :(得分:0)
我必须存储很多来自不同语言(包括法语和西班牙语)的强调字母,而我目前唯一安全的方法是将所有内容存储在MySQL中的utf8_ bin 中,并且像charset utf-8一样显示页面。 无需进一步处理,无论是MySQL还是PHP。
另外,请确保您的IDE使用utf8管理您的文件。