static $search = array('{AUTOINCREMENT}', '{PRIMARY}',
'{UNSIGNED}', '{FULLTEXT}', '{FULLTEXT_MYSQL}', '{BOOLEAN}');
static $replace = array('int(11) not null auto_increment', 'primary key',
- 'unsigned' , 'FULLTEXT', 'FULLTEXT', 'enum (\'true\', \'false\') NOT NULL default \'true\'');
-
+ 'unsigned' , 'FULLTEXT', 'FULLTEXT', 'enum (\'true\', \'false\') NOT NULL default \'true\'');
+ static $is_utf8 = null;
+ global $serendipity;
+
+ if ($is_utf8 === null) {
+ $search[] = '{UTF_8}';
+ if ( $_POST['charset'] == 'UTF-8/' ||
+ $serendipity['charset'] == 'UTF-8/' ||
+ $serendipity['POST']['charset'] == 'UTF-8/' ||
+ LANG_CHARSET == 'UTF-8' ) {
+ $replace[] = '/*!40100 CHARACTER SET utf8 COLLATE utf8_unicode_ci */';
+ } else {
+ $replace[] = '';
+ }
+ }
+
$query = trim(str_replace($search, $replace, $query));
+
if ($query{0} == '@') {
// Errors are expected to happen (like duplicate index creation)
return serendipity_db_query(substr($query, 1), false, 'both', false, false, false, true);
function serendipity_db_schema_import($query) {
static $search = array('{AUTOINCREMENT}', '{PRIMARY}', '{UNSIGNED}',
- '{FULLTEXT}', '{BOOLEAN}', 'int(1)', 'int(10)', 'int(11)', 'int(4)');
+ '{FULLTEXT}', '{BOOLEAN}', 'int(1)', 'int(10)', 'int(11)', 'int(4)', '{UTF_8});
static $replace = array('SERIAL', 'primary key', '', '', 'BOOLEAN NOT NULL', 'int2',
- 'int4', 'int4', 'int4');
+ 'int4', 'int4', 'int4', '');
if (stristr($query, '{FULLTEXT_MYSQL}')) {
return true;
email varchar(128) not null default '',
userlevel int(4) {UNSIGNED} not null default '0',
right_publish int(1) default '1'
-);
+) {UTF_8};
create table {PREFIX}groups (
id {AUTOINCREMENT} {PRIMARY},
name varchar(64) default null
-);
+) {UTF_8};
create table {PREFIX}groupconfig (
id int(10) {UNSIGNED} not null default '0',
property varchar(64) default null,
value varchar(128) default null
-);
+) {UTF_8};
CREATE INDEX groupid_idx ON {PREFIX}groupconfig (id);
CREATE INDEX groupprop_idx ON {PREFIX}groupconfig (id, property);
create table {PREFIX}authorgroups (
groupid int(10) {UNSIGNED} not null default '0',
authorid int(10) {UNSIGNED} not null default '0'
-);
+) {UTF_8};
CREATE INDEX authorgroup_idxA ON {PREFIX}authorgroups (groupid);
CREATE INDEX authorgroup_idxB ON {PREFIX}authorgroups (authorid);
artifact_type varchar(64) NOT NULL default '',
artifact_mode varchar(64) NOT NULL default '',
artifact_index varchar(64) NOT NULL default ''
-);
+) {UTF_8};
CREATE INDEX accessgroup_idx ON {PREFIX}access(groupid);
CREATE INDEX accessgroupT_idx ON {PREFIX}access(artifact_id,artifact_type,artifact_mode);
subscribed {BOOLEAN},
status varchar(50) not null,
referer varchar(200) default null
-);
+) {UTF_8};
CREATE INDEX commentry_idx ON {PREFIX}comments (entry_id);
CREATE INDEX commpentry_idx ON {PREFIX}comments (parent_id);
allow_comments {BOOLEAN},
last_modified int(10) {UNSIGNED} default null,
moderate_comments {BOOLEAN}
-);
+) {UTF_8};
# FULLTEXT_MYSQL is ignored on all Non-MySQL setups (SQLite, PostgreSQL)
CREATE {FULLTEXT_MYSQL} INDEX entry_idx on {PREFIX}entries (title,body,extended);
entry_id int(10) {UNSIGNED} not null default '0',
link text,
name text
-);
+) {UTF_8};
CREATE INDEX refentry_idx ON {PREFIX}references (entry_id);
path varchar(255),
query varchar(255),
PRIMARY KEY (host,day,entry_id)
-);
+) {UTF_8};
CREATE INDEX exits_idx ON {PREFIX}exits (entry_id,day);
path varchar(255),
query varchar(255),
PRIMARY KEY (host,day,entry_id)
-);
+) {UTF_8};
CREATE INDEX referrers_idx ON {PREFIX}referrers (entry_id,day);
name varchar(255) not null,
value text not null,
authorid int(11) default '0'
-);
+) {UTF_8};
CREATE INDEX configauthorid_idx ON {PREFIX}config (authorid);
path varchar(255),
query varchar(255),
last timestamp NOT NULL
-);
+) {UTF_8};
CREATE INDEX url_idx on {PREFIX}suppress (host, ip);
CREATE INDEX urllast_idx on {PREFIX}suppress (last);
authorid int(11) default '0',
path varchar(255) default null,
PRIMARY KEY(name)
-);
+) {UTF_8};
CREATE INDEX pluginauthorid_idx ON {PREFIX}plugins (authorid);
CREATE INDEX pluginplace_idx ON {PREFIX}plugins (placement);
category_left int(11) default '0',
category_right int(11) default '0',
parentid int(11) DEFAULT '0' NOT NULL
-);
+) {UTF_8};
CREATE INDEX categorya_idx ON {PREFIX}category (authorid);
CREATE INDEX categoryp_idx ON {PREFIX}category (parentid);
authorid int(11) default '0',
path text,
hotlink int(1)
-);
+) {UTF_8};
CREATE INDEX imagesauthorid_idx ON {PREFIX}images (authorid);
CREATE {FULLTEXT} INDEX pathkey_idx on {PREFIX}images (path);
CREATE TABLE {PREFIX}entrycat (
entryid int(11) not null,
categoryid int(11) not null
-);
+) {UTF_8};
CREATE UNIQUE INDEX entryid_idx ON {PREFIX}entrycat (entryid, categoryid);
entryid int(11) not null,
property varchar(255) not null,
value text
-);
+) {UTF_8};
CREATE INDEX entrypropid_idx ON {PREFIX}entryproperties (entryid);
CREATE UNIQUE INDEX prop_idx ON {PREFIX}entryproperties (entryid, property);
entry_id int(10) {UNSIGNED} not null default '0',
type varchar(200) not null default '',
data text
-);
+) {UTF_8};
CREATE INDEX pl_idx ON {PREFIX}permalinks (permalink);
CREATE INDEX ple_idx ON {PREFIX}permalinks (entry_id);
create table {PREFIX}plugincategories (
class_name varchar(250) default null,
category varchar(250) default null
-);
+) {UTF_8};
CREATE INDEX plugincat_idx ON {PREFIX}plugincategories(class_name, category);
requirements text NOT NULL,
website varchar(255) NOT NULL default '',
last_modified int(11) NOT NULL default '0'
-);
+) {UTF_8};
CREATE INDEX pluginlist_f_idx ON {PREFIX}pluginlist(plugin_file);
CREATE INDEX pluginlist_cn_idx ON {PREFIX}pluginlist(class_name);