2. 数据库 UTF-8 实现
mysql 4.1.2以上版本支持UTF-8,但是Joomla支持mysql更低的版本,当使用非utf-8数据库时候Joomla 1.5也提供安全的向后兼容。
2.1 新功能 - Joomla!设置数据库和表的字符集
当数据库默认字符集设置为utf8时候,在安装过程中,Joomla将检查数据库是否支持UTF-8,如果支持,用户可以选择合适的字典顺序,数据库将以utf-8编码和选择的字典顺序创建,表将以同样的方式创建。
UTF-8 表创建例子:
#
# Table structure for table `#__bannerclient` in a UTF-8 database
#
CREATE TABLE `#__bannerclient` (
`cid` int(11) NOT NULL auto_increment,
`name` varchar(60) NOT NULL default '',
`contact` varchar(60) NOT NULL default '',
`email` varchar(60) NOT NULL default '',
`extrainfo` text NOT NULL,
`checked_out` tinyint(1) NOT NULL default '0',
`checked_out_time` time default NULL,
`editor` varchar(50) default NULL,
PRIMARY KEY (`cid`)
) TYPE=MyISAM CHARACTER SET `utf8` COLLATE `utf8_general_ci`;
创建数据库和表的时候都指定字符集和字典顺寻,主要是在数据库存在并且默认字符集不是UTF-8的情况下支持utf-8字符集。
2.2 数据库向下兼容的方法
在非utf-8字符集数据库中保存utf-8编码数据的主要问题就是可能导致的数据截断。因而,‘joomla_backward.sql’用来替代‘joomla.sql’,‘joomla_backward.sql’采用默认字符集,varchar字段的长度是‘joomla.sql’中的三倍,以防止数据截断。
扩大自创存储的标准如下:
对于只保存ASCII 数据的varchar字段保持不变,对于保存utf-8或者混合的字段长度增为3倍,如果扩展后的长度超过255,那么就采用text类型,请看下面的例子:
#
# Table structure for table `#__bannerclient` in a non-UTF-8 database
#
CREATE TABLE `#__bannerclient` (
`cid` int(11) NOT NULL auto_increment,
`name` varchar(180) NOT NULL default '',
`contact` varchar(180) NOT NULL default '',
`email` varchar(60) NOT NULL default '',
`extrainfo` text NOT NULL,
`checked_out` tinyint(1) NOT NULL default '0',
`checked_out_time` time default NULL,
`editor` varchar(150) default NULL,
PRIMARY KEY (`cid`)
) TYPE=MyISAM;
同样的方法在组件安装的时候同样采用,详情请看第4节
2.3 Database 类 API (relevant to UTF-8)
下面的代码片段用来相关的数据库操作
获取数据库版本
安装时候设置字典顺序
数据库是否支持utf-8
/**
* Assumes database collation in use by sampling one text field in one core table
* @return string Collation in use
*/
function getCollation ()
/**
* @return string database version in use
*/
function getVersion()
/**
* Determines if database has UTF support
* @return boolean True if UTF-8 support exists
*/
function hasUTF()