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

时间:2013-12-02 18:08:22

标签: php mysql codeigniter character-encoding

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

我测试了将字符集保留为CI中的utf8并运行将加密数据存储到表列中的方法,但它返回了一堆问号和东西,这些都没有让我对mcrypt功能有效。

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

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

我想知道使用latin1utf8是否会导致任何问题?我觉得它看起来不对,使用两个不同的字符集和所有,但为了使用mcrypt_create_iv函数(用于加密密码,一个大问题),我采取了这样做无论如何,希望它不会影响任何事情(即正确插入/获取数据)。

有人可以说清楚,我真的很感激。感谢

1 个答案:

答案 0 :(得分:1)

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

所以:如果你想能够存储所有文本数据,你将需要更改你的charset utf8,并使用utf8_general_ci整理。如果你只想要latin1(我不知道你为什么会这么做,但你可能......)那么也要使用拉丁语的整理规则。

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