Specify collation in field/columns that are important for sorting and search features; the rest can use UTF-8 binary. Eventually, certain other columns that use text in some manner may use different specific Unicode collations.
Specify collation in field/columns that are important for sorting and search features; the rest can use UTF-8 binary. Eventually, certain other columns that use text in some manner may use different specific Unicode collations.

--- a/docs/tables.sql
+++ b/docs/tables.sql
@@ -60,8 +60,8 @@
 
 CREATE TABLE `fanfiction_authors` (
   `uid` int(11) NOT NULL auto_increment,
-  `penname` varchar(200) NOT NULL default '',
-  `realname` varchar(200) NOT NULL default '',
+  `penname` varchar(200) NOT NULL default '' COLLATE utf8mb4_unicode_ci,
+  `realname` varchar(200) NOT NULL default '' COLLATE utf8mb4_unicode_ci,
   `email` varchar(200) NOT NULL default '',
   `website` varchar(200) NOT NULL default '',
   `bio` text NOT NULL,
@@ -72,7 +72,7 @@
   PRIMARY KEY  (`uid`),
   KEY `penname` (`penname`),
   KEY `admincreated` (`admincreated`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
 
 -- --------------------------------------------------------
 
@@ -100,7 +100,7 @@
 CREATE TABLE `fanfiction_categories` (
   `catid` int(11) NOT NULL auto_increment,
   `parentcatid` int(11) NOT NULL default '-1',
-  `category` varchar(60) NOT NULL default '',
+  `category` varchar(60) NOT NULL default '' COLLATE utf8mb4_unicode_ci,
   `description` text NOT NULL,
   `image` varchar(100) NOT NULL default '',
   `locked` tinyint(4) NOT NULL default '0',
@@ -109,7 +109,7 @@
   `numitems` int(11) NOT NULL default '0',
   PRIMARY KEY  (`catid`),
   KEY `byparent` (`parentcatid`,`displayorder`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
 
 -- --------------------------------------------------------
 
@@ -404,8 +404,8 @@
 
 CREATE TABLE `fanfiction_series` (
   `seriesid` int(11) NOT NULL auto_increment,
-  `title` varchar(200) NOT NULL default '',
-  `summary` text,
+  `title` varchar(200) NOT NULL default '' COLLATE utf8mb4_unicode_ci,
+  `summary` text COLLATE utf8mb4_unicode_ci,
   `uid` int(11) NOT NULL default '0',
   `isopen` tinyint(4) NOT NULL default '0',
   `catid` varchar(200) NOT NULL default '0',
@@ -420,7 +420,7 @@
   PRIMARY KEY  (`seriesid`),
   KEY `catid` (`catid`),
   KEY `owner` (`uid`,`title`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
 
 -- --------------------------------------------------------
 -- 
@@ -448,8 +448,8 @@
 
 CREATE TABLE `fanfiction_stories` (
   `sid` int(11) NOT NULL auto_increment,
-  `title` varchar(200) NOT NULL default '',
-  `summary` text,
+  `title` varchar(200) NOT NULL default '' COLLATE utf8mb4_unicode_ci,
+  `summary` text COLLATE uft8mb4_unicode_ci,
   `storynotes` text,
   `catid` varchar(100) NOT NULL default '0',
   `classes` varchar(200) default NULL,
@@ -480,7 +480,7 @@
   KEY `challenges` (`challenges`),
   KEY `validateduid` (`validated`,`uid`),
   KEY `recent` (`updated`,`validated`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
 
 -- --------------------------------------------------------
 

--- a/install/install.php
+++ b/install/install.php
@@ -524,8 +524,8 @@
 				$output .= "<tr><td>" . $tableprefix . "fanfiction_authorprefs</td><td align='center'>" . ($authorprefs ? "<img src=\"../images/check.gif\">" : "<img src=\"../images/X.gif\">") . "</td></tr>";
 				$authors = dbquery("CREATE TABLE IF NOT EXISTS `" . $tableprefix . "fanfiction_authors` (
   `uid` int(11) NOT NULL auto_increment,
-  `penname` varchar(200) NOT NULL default '',
-  `realname` varchar(200) NOT NULL default '',
+  `penname` varchar(200) NOT NULL default '' COLLATE utf8mb4_unicode_ci,
+  `realname` varchar(200) NOT NULL default '' COLLATE utf8mb4_unicode_ci,
   `email` varchar(200) NOT NULL default '',
   `bio` text NULL,
   `image` varchar(200) NOT NULL default '',
@@ -535,7 +535,7 @@
   PRIMARY KEY  (`uid`),
   KEY `penname` (`penname`),
   KEY `admincreated` (`admincreated`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;");
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;");
 				$output .= "<tr><td>" . $tableprefix . "fanfiction_authors</td><td align='center'>" . ($authors ? "<img src=\"../images/check.gif\">" : "<img src=\"../images/X.gif\">") . "</td></tr>";
 				$blocks = dbquery("CREATE TABLE IF NOT EXISTS `" . $tableprefix . "fanfiction_blocks` (
   `block_id` int(11) NOT NULL auto_increment,
@@ -551,7 +551,7 @@
 				$categories = dbquery("CREATE TABLE IF NOT EXISTS `" . $tableprefix . "fanfiction_categories` (
   `catid` int(11) NOT NULL auto_increment,
   `parentcatid` int(11) NOT NULL default '-1',
-  `category` varchar(60) NOT NULL default '',
+  `category` varchar(60) NOT NULL default '' COLLATE utf8mb4_unicode_ci,
   `description` text NOT NULL,
   `image` varchar(100) NOT NULL default '',
   `locked` char(1) NOT NULL default '0',
@@ -560,7 +560,7 @@
   `numitems` int(11) NOT NULL default '0',
   PRIMARY KEY  (`catid`),
   KEY `byparent` (`parentcatid`,`displayorder`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;");
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;");
 				$output .= "<tr><td>" . $tableprefix . "fanfiction_categories</td><td align='center'>" . ($categories ? "<img src=\"../images/check.gif\">" : "<img src=\"../images/X.gif\">") . "</td></tr>";
 				$chapters = dbquery("CREATE TABLE IF NOT EXISTS `" . $tableprefix . "fanfiction_chapters` (
   `chapid` int(11) NOT NULL auto_increment,
@@ -750,8 +750,8 @@
 				$output .= "<tr><td>" . $tableprefix . "fanfiction_reviews</td><td align='center'>" . ($reviews ? "<img src=\"../images/check.gif\">" : "<img src=\"../images/X.gif\">") . "</td></tr>";
 				$series = dbquery("CREATE TABLE IF NOT EXISTS `" . $tableprefix . "fanfiction_series` (
   `seriesid` int(11) NOT NULL auto_increment,
-  `title` varchar(200) NOT NULL default '',
-  `summary` text NOT NULL,
+  `title` varchar(200) NOT NULL default '' COLLATE utf8mb4_unicode_ci,
+  `summary` text NOT NULL COLLATE utf8mb4_unicode_ci,
   `uid` int(11) NOT NULL default '0',
   `isopen` tinyint(4) NOT NULL default '0',
   `catid` varchar(200) NOT NULL default '0',
@@ -766,7 +766,7 @@
   KEY `characters` (`characters`),
   KEY `classes` (`classes`),
   KEY `owner` (`uid`,`title`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;");
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;");
 				$output .= "<tr><td>" . $tableprefix . "fanfiction_series</td><td align='center'>" . ($series ? "<img src=\"../images/check.gif\">" : "<img src=\"../images/X.gif\">") . "</td></tr>";
 				$stats = dbquery("CREATE TABLE IF NOT EXISTS `" . $tableprefix . "fanfiction_stats` (
   `sitekey` varchar(50) NOT NULL default '0',
@@ -784,8 +784,8 @@
 				$output .= "<tr><td>" . $tableprefix . "fanfiction_stats</td><td align='center'>" . ($stats ? "<img src=\"../images/check.gif\">" : "<img src=\"../images/X.gif\">") . "</td></tr>";
 				$stories = dbquery("CREATE TABLE IF NOT EXISTS `" . $tableprefix . "fanfiction_stories` (
   `sid` int(11) NOT NULL auto_increment,
-  `title` varchar(200) NOT NULL default 'Untitled',
-  `summary` text NULL,
+  `title` varchar(200) NOT NULL default 'Untitled' COLLATE utf8mb4_unicode_ci,
+  `summary` text NULL COLLATE utf8mb4_unicode_ci,
   `storynotes` text NULL,
   `catid` varchar(100) NOT NULL default '0',
   `classes` varchar(200) NOT NULL default '0',
@@ -814,7 +814,7 @@
   KEY `rr` (`rr`),
   KEY `validateduid` (`validated`,`uid`),
   KEY `recent` (`updated`,`validated`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;");
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;");
 				$output .= "<tr><td>" . $tableprefix . "fanfiction_stories</td><td align='center'>" . ($stories ? "<img src=\"../images/check.gif\">" : "<img src=\"../images/X.gif\">") . "</td></tr>";
 				$output .= "</table>";
 				$output .= write_message(_TABLEFAILED . "<br /><br /><a href='install.php?step=4'>" . _CONTINUE . "</a>");