gpt4 book ai didi

php - 具有不同的服务器端和数据库字符集 - CodeIgniter

转载 作者:行者123 更新时间:2023-11-29 00:23:06 33 4
gpt4 key购买 nike

我在 PHP 中使用加密函数 (mcrypt_create_iv)。我看到在我的数据库表中,存储此函数返回值的字段是 latin1_swedish_ci 字符集,而在 CodeIgniter (config/database.php) 中,字符集设置为 utf8.

我测试了在 CI 中将字符集保持为 utf8 并运行将加密数据存储到表列中的方法,但它返回了一堆问号和一些让我感觉不到的东西确信 mcrypt 函数有效。

所以我将 CIs 数据库字符集更改为 latin1,这与我的数据库表中的字段相同。我的数据库配置文件现在看起来像:

$db['default']['char_set'] = 'latin1';
$db['default']['dbcollat'] = 'utf8_general_ci';

我想知道同时使用latin1utf8会不会有什么问题?我能感觉到它看起来不对劲,使用了两个不同的字符集,但是为了使用 mcrypt_create_iv 函数(用于加盐密码,imo 很重要),我求助于无论如何都要这样做,希望它不会影响任何事情(即正确插入/取回数据)。

有人能给我一些启发吗,我将不胜感激。谢谢

最佳答案

使用字符集 latin 但 UTF 排序规则没有多大意义。 latin 字符集会将大多数 unicode 字符转换为“?”因为它们不存在于指定的字符集中。使用基于不在您选择的字符集中的字符的排序规则不会执行任何操作。

因此:如果您希望能够存储所有文本数据,您需要更改字符集 utf8,并使用 utf8_general_ci 归类。如果您只想要 latin1(我不知道您为什么会这样做,但您可能...)那么也可以使用 latin 的排序规则。

如果您确实使用 utf8,您还需要记住,当您设置与数据库的连接时,确保连接也使用 utf8 作为其字符集names,这样您就不会在服务器和数据库之间“传输”时丢失文本。

关于php - 具有不同的服务器端和数据库字符集 - CodeIgniter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20334929/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com