Mysql Tibetan Collation

THL Toolbox > Tibetan Scripts, Fonts & Related Issues > Sorting Tibetan > MYSQL Tibetan Collation

Collation of Tibetan and Dzongkha in MYSQL

There is a way for MySQL to support Tibetan and Dzongkha script collation allowing proper comparison and sorting of Dzongkha and Tibetan words and phrases directly from the database. This post explains how to add this new collation via LDML (Locale Data Markup Language).

Credits

The collation rules described here and its encoding into various formats are the product of a collective effort involving Dasho Sangay Dorji, Chris Fynn, Robert Chilton, and Ake Persson working in collaboration with the Dzongkha Development Comission and the Department of Information and Technology of the Royal Government of Bhutan. This description is written by Andres Montano to document the steps as described by Pema Geyleg for their deployment in MySQL.

Introduction

Until now, the only production server database that supported Tibetan collation was Mimer SQL. Now there is a way to add Dzongkha collation (of which Tibetan collation is a subset) to the more popular MySQL database. This marks an important breakthrough in Dzongkha and Tibetan computing, since now applications that require sorting such as glossaries and dictionaries using MySQL do not have to handle the quite convoluted rules of sorting through software, but can leave this task to the database.

Requirements

The version requirement is: MySQL versions 5.0.44 or higher is required.

Steps

The steps to add a new collation via LDML are quite simple (see here for a more detailed explanation).

1. Open MySQL character set definition file. In Linux systems the file will probably be /usr/share/mysql/charsets/Index.xml and in Windows systems C:Program FilesMySQLMySQL Server 5.0sharecharsetsIndex.xml

2. Find the <charset name="ucs2"> tag.

3. Under

<collation name="ucs2_bin" id="90"> <flag>binary</flag> <flag>compiled</flag> </collation>

and before the </charset> tag add the following ucs2 start collation tag:

<collation name="ucs2_dzongkha_ci" id="146"> <! Dzongkha experimental collation >

The id has to be higher than the last ucs2 id, which at the time of the writing of this article was 145. You can easily check by running the SQL query:

SELECT collation_name, id FROM information_schema.collations WHERE character_set_name='ucs2' ORDER BY id;

4. After the opening collation tag, add the following collation rules

<rules> <reset>u0F40</reset> <s>u0F88u0F90</s> <p>u0F51u0F40</p> <p>u0F56u0F40</p> <p>u0F62u0F90</p> <p>u0F63u0F90</p> <p>u0F66u0F90</p> <p>u0F56u0F62u0F90</p> <p>u0F56u0F66u0F90</p> <reset>u0F41</reset> <s>u0F88u0F91</s> <p>u0F58u0F41</p> <p>u0F60u0F41</p> <reset>u0F42</reset> <p>u0F51u0F42u0F42</p> <p>u0F51u0F42u0F44</p> <p>u0F51u0F42u0F51</p> <p>u0F51u0F42u0F56</p> <p>u0F51u0F42u0F5D</p> <p>u0F51u0F42u0F60</p> <p>u0F51u0F42u0F62</p> <p>u0F51u0F42u0F63</p> <p>u0F51u0F42u0F66</p> <p>u0F51u0F42u0F74</p> <p>u0F51u0F42u0F7A</p> <p>u0F51u0F42u0F7C</p> <p>u0F51u0F42u0FB1</p> <p>u0F51u0F42u0FB2</p> <p>u0F56u0F42u0F42</p> <p>u0F56u0F42u0F51</p> <p>u0F56u0F42u0F58</p> <t>u0F56u0F42u0F7E</t> <p>u0F56u0F42u0F5D</p> <p>u0F56u0F42u0F60</p> <p>u0F56u0F42u0F62</p> <p>u0F56u0F42u0F7A</p> <p>u0F56u0F42u0F7C</p> <p>u0F56u0F42u0FB1</p> <p>u0F56u0F42u0FB2</p> <p>u0F56u0F42u0FB3</p> <p>u0F58u0F42u0F62</p> <p>u0F58u0F42u0F63</p> <p>u0F58u0F42u0F74</p> <p>u0F58u0F42u0F7A</p> <p>u0F58u0F42u0F7C</p> <p>u0F58u0F42u0FB1</p> <p>u0F58u0F42u0FB2</p> <p>u0F60u0F42u0F42</p> <p>u0F60u0F42u0F44</p> <p>u0F60u0F42u0F51</p> <p>u0F60u0F42u0F53</p> <p>u0F60u0F42u0F56</p> <p>u0F60u0F42u0F58</p> <t>u0F60u0F42u0F7E</t> <p>u0F60u0F42u0F60</p> <p>u0F60u0F42u0F62</p> <p>u0F60u0F42u0F63</p> <p>u0F60u0F42u0F66</p> <p>u0F60u0F42u0F72</p> <p>u0F60u0F42u0F74</p> <p>u0F60u0F42u0F7A</p> <p>u0F60u0F42u0F7C</p> <p>u0F60u0F42u0FB1</p> <p>u0F60u0F42u0FB2</p> <p>u0F62u0F92</p> <p>u0F63u0F92</p> <p>u0F66u0F92</p> <p>u0F56u0F62u0F92</p> <p>u0F56u0F66u0F92</p> <reset>u0F44</reset> <p>u0F51u0F44u0F42</p> <p>u0F51u0F44u0F44</p> <p>u0F51u0F44u0F53</p> <p>u0F51u0F44u0F62</p> <p>u0F51u0F44u0F74</p> <p>u0F51u0F44u0F7C</p> <p>u0F58u0F44u0F42</p> <p>u0F58u0F44u0F53</p> <p>u0F58u0F44u0F60</p> <p>u0F58u0F44u0F62</p> <p>u0F58u0F44u0F63</p> <p>u0F58u0F44u0F7C</p> <p>u0F62u0F94</p> <p>u0F63u0F94</p> <p>u0F66u0F94</p> <p>u0F56u0F62u0F94</p> <p>u0F56u0F66u0F94</p> <reset>u0F45</reset> <p>u0F42u0F45</p> <p>u0F56u0F45</p> <p>u0F63u0F95</p> <p>u0F56u0F63u0F95</p> <reset>u0F46</reset> <p>u0F58u0F46</p> <p>u0F60u0F46</p> <reset>u0F47</reset> <p>u0F58u0F47</p> <p>u0F60u0F47</p> <p>u0F62u0F97</p> <p>u0F63u0F97</p> <p>u0F56u0F62u0F97</p> <reset>u0F49</reset> <s>u0F8B0F99</s> <p>u0F42u0F49</p> <p>u0F58u0F49</p> <p>u0F62u0F99</p> <p>u0F66u0F99</p> <p>u0F56u0F62u0F99</p> <p>u0F56u0F66u0F99</p> <reset>u0F4F</reset> <t>u0F4A</t> <p>u0F42u0F4F</p> <p>u0F56u0F4F</p> <p>u0F62u0F9F</p> <p>u0F63u0F9F</p> <p>u0F66u0F9F</p> <p>u0F56u0F62u0F9F</p> <p>u0F56u0F63u0F9F</p> <p>u0F56u0F66u0F9F</p> <reset>u0F50</reset> <t>u0F4B</t> <p>u0F58u0F50</p> <p>u0F60u0F50</p> <reset>u0F51</reset> <t>u0F4C</t> <p>u0F42u0F51u0F42</p> <p>u0F42u0F51u0F44</p> <p>u0F42u0F51u0F53</p> <p>u0F42u0F51u0F56</p> <p>u0F42u0F51u0F58</p> <t>u0F42u0F51u0F7E</t> <p>u0F42u0F51u0F60</p> <p>u0F42u0F51u0F62</p> <p>u0F42u0F51u0F63</p> <p>u0F42u0F51u0F66</p> <p>u0F42u0F51u0F72</p> <p>u0F42u0F51u0F74</p> <p>u0F42u0F51u0F7A</p> <p>u0F42u0F51u0F7C</p> <p>u0F56u0F51u0F42</p> <p>u0F56u0F51u0F58</p> <t>u0F56u0F51u0F7E</t> <p>u0F56u0F51u0F60</p> <p>u0F56u0F51u0F62</p> <p>u0F56u0F51u0F63</p> <p>u0F56u0F51u0F66</p> <p>u0F56u0F51u0F74</p> <p>u0F56u0F51u0F7A</p> <p>u0F56u0F51u0F7C</p> <p>u0F58u0F51u0F42</p> <p>u0F58u0F51u0F44</p> <p>u0F58u0F51u0F53</p> <p>u0F58u0F51u0F60</p> <p>u0F58u0F51u0F62</p> <p>u0F58u0F51u0F74</p> <p>u0F58u0F51u0F7A</p> <p>u0F58u0F51u0F7C</p> <p>u0F60u0F51u0F42</p> <p>u0F60u0F51u0F44</p> <p>u0F60u0F51u0F51</p> <p>u0F60u0F51u0F53</p> <p>u0F60u0F51u0F56</p> <p>u0F60u0F51u0F58</p> <t>u0F60u0F51u0F7E</t> <p>u0F60u0F51u0F5D</p> <p>u0F60u0F51u0F60</p> <p>u0F60u0F51u0F62</p> <p>u0F60u0F51u0F63</p> <p>u0F60u0F51u0F66</p> <p>u0F60u0F51u0F72</p> <p>u0F60u0F51u0F74</p> <p>u0F60u0F51u0F7A</p> <p>u0F60u0F51u0F7C</p> <p>u0F60u0F51u0FB2</p> <p>u0F62u0FA1</p> <p>u0F63u0FA1</p> <p>u0F66u0FA1</p> <p>u0F56u0F62u0FA1</p> <p>u0F56u0F63u0FA1</p> <p>u0F56u0F66u0FA1</p> <reset>u0F53</reset> <t>u0F4E</t> <p>u0F42u0F53u0F42</p> <p>u0F42u0F53u0F44</p> <p>u0F42u0F53u0F51</p> <p>u0F42u0F53u0F53</p> <p>u0F42u0F53u0F58</p> <t>u0F42u0F53u0F7E</t> <p>u0F42u0F53u0F5D</p> <p>u0F42u0F53u0F60</p> <p>u0F42u0F53u0F66</p> <p>u0F42u0F53u0F74</p> <p>u0F42u0F53u0F7C</p> <p>u0F58u0F53u0F42</p> <p>u0F58u0F53u0F44</p> <p>u0F58u0F53u0F53</p> <p>u0F58u0F53u0F56</p> <p>u0F58u0F53u0F58</p> <t>u0F58u0F53u0F7E</t> <p>u0F58u0F53u0F60</p> <p>u0F58u0F53u0F62</p> <p>u0F58u0F53u0F63</p> <p>u0F58u0F53u0F74</p> <p>u0F58u0F53u0F7A</p> <p>u0F58u0F53u0F7C</p> <p>u0F62u0FA3</p> <p>u0F66u0FA3</p> <p>u0F56u0F62u0FA3</p> <p>u0F56u0F66u0FA3</p> <reset>u0F54</reset> <s>u0F89u0FA4</s> <p>u0F51u0F54u0F42</p> <p>u0F51u0F54u0F44</p> <p>u0F51u0F54u0F51</p> <p>u0F51u0F54u0F60</p> <p>u0F51u0F54u0F62</p> <p>u0F51u0F54u0F63</p> <p>u0F51u0F54u0F66</p> <p>u0F51u0F54u0F74</p> <p>u0F51u0F54u0F7A</p> <p>u0F51u0F54u0F7Cu0F42</p> <p>u0F51u0F54u0F7Cu0F44</p> <p>u0F51u0F54u0F7Cu0F51</p> <p>u0F51u0F54u0F7Cu0F53</p> <p>u0F51u0F54u0F7Cu0F62</p> <p>u0F51u0F54u0FB1</p> <p>u0F51u0F54u0FB2</p> <p>u0F63u0FA4</p> <p>u0F66u0FA4</p> <reset>u0F55</reset> <s>u0F89u0FA5</s> <p>u0F60u0F55</p> <reset>u0F56</reset> <p>u0F51u0F56u0F42</p> <p>u0F51u0F56u0F44</p> <p>u0F51u0F56u0F51</p> <p>u0F51u0F56u0F53</p> <p>u0F51u0F56u0F56</p> <p>u0F51u0F56u0F60</p> <p>u0F51u0F56u0F62</p> <p>u0F51u0F56u0F63</p> <p>u0F51u0F56u0F66</p> <p>u0F51u0F56u0F74</p> <p>u0F51u0F56u0F7A</p> <p>u0F51u0F56u0F7C</p> <p>u0F51u0F56u0FB1</p> <p>u0F51u0F56u0FB2</p> <p>u0F60u0F56u0F42</p> <p>u0F60u0F56u0F44</p> <p>u0F60u0F56u0F51</p> <p>u0F60u0F56u0F53</p> <p>u0F60u0F56u0F56</p> <p>u0F60u0F56u0F58</p> <t>u0F60u0F56u0F7E</t> <p>u0F60u0F56u0F60</p> <p>u0F60u0F56u0F62</p> <p>u0F60u0F56u0F63</p> <p>u0F60u0F56u0F72</p> <p>u0F60u0F56u0F74</p> <p>u0F60u0F56u0F7A</p> <p>u0F60u0F56u0F7C</p> <p>u0F60u0F56u0FB1</p> <p>u0F60u0F56u0FB2</p> <p>u0F62u0FA6</p> <p>u0F63u0FA6</p> <p>u0F66u0FA6</p> <reset>u0F58</reset> <t>u0F7E</t> <t>u0F82</t> <t>u0F83</t> <p>u0F51u0F58u0F42</p> <p>u0F51u0F58u0F44</p> <p>u0F51u0F58u0F53</p> <p>u0F51u0F58u0F5D</p> <p>u0F51u0F58u0F60</p> <p>u0F51u0F58u0F62</p> <p>u0F51u0F58u0F66</p> <p>u0F51u0F58u0F72</p> <p>u0F51u0F58u0F74</p> <p>u0F51u0F58u0F7A</p> <p>u0F51u0F58u0F7Cu0F51</p> <p>u0F51u0F58u0FB1</p> <p>u0F62u0FA8</p> <p>u0F66u0FA8</p> <reset>u0F59</reset> <p>u0F42u0F59</p> <p>u0F56u0F59</p> <p>u0F62u0FA9</p> <p>u0F66u0FA9</p> <p>u0F56u0F62u0FA9</p> <p>u0F56u0F66u0FA9</p> <reset>u0F5A</reset> <p>u0F58u0F5A</p> <p>u0F60u0F5A</p> <reset>u0F5B</reset> <p>u0F58u0F5B</p> <p>u0F60u0F5B</p> <p>u0F62u0FAB</p> <p>u0F56u0F62u0FAB</p> <reset>u0F5D</reset> <reset>u0F5E</reset> <p>u0F42u0F5E</p> <p>u0F56u0F5E</p> <reset>u0F5F</reset> <p>u0F42u0F5F</p> <p>u0F56u0F5F</p> <reset>u0F60</reset> <reset>u0F61</reset> <p>u0F42u0F61</p> <reset>u0F62</reset> <t>u0F6A</t> <p>u0F56u0F62u0FB3</p> <reset>u0F63</reset> <reset>u0F64</reset> <t>u0F65</t> <p>u0F42u0F64</p> <p>u0F56u0F64</p> <reset>u0F66</reset> <p>u0F42u0F66u0F42</p> <p>u0F42u0F66u0F44</p> <p>u0F42u0F66u0F51</p> <p>u0F42u0F66u0F53</p> <p>u0F42u0F66u0F56</p> <p>u0F42u0F66u0F60</p> <p>u0F42u0F66u0F62</p> <p>u0F42u0F66u0F63</p> <p>u0F42u0F66u0F66</p> <p>u0F42u0F66u0F72</p> <p>u0F42u0F66u0F74</p> <p>u0F42u0F66u0F7A</p> <p>u0F42u0F66u0F7C</p> <p>u0F56u0F66u0F42</p> <p>u0F56u0F66u0F44</p> <p>u0F56u0F66u0F51</p> <p>u0F56u0F66u0F56</p> <p>u0F56u0F66u0F58</p> <t>u0F56u0F66u0F7E</t> <p>u0F56u0F66u0F62</p> <p>u0F56u0F66u0F63</p> <p>u0F56u0F66u0F72</p> <p>u0F56u0F66u0F74</p> <p>u0F56u0F66u0F7A</p> <p>u0F56u0F66u0F7C</p> <p>u0F56u0F66u0FAD</p> <p>u0F56u0F66u0FB2</p> <p>u0F56u0F66u0FB3</p> <reset>u0F67</reset> <p>u0F63u0FB7</p> <reset>u0F68</reset> <reset>u0F72</reset> <t>u0F80</t> <reset>u0F74</reset> <reset>u0F7A</reset> <t>u0F7B</t> <reset>u0F7C</reset> <t>u0F7D</t> <p>u0F90</p> <p>u0F91</p> <p>u0F92</p> <p>u0F94</p> <p>u0F95</p> <p>u0F96</p> <p>u0F97</p> <p>u0F99</p> <p>u0F9F</p> <t>u0F9A</t> <p>u0FA0</p> <t>u0F9B</t> <p>u0FA1</p> <t>u0F9C</t> <p>u0FA3</p> <t>u0F9E</t> <p>u0FA4</p> <p>u0FA5</p> <p>u0FA6</p> <p>u0FA8</p> <p>u0FA9</p> <p>u0FAA</p> <p>u0FAB</p> <p>u0FAD</p> <t>u0FBA</t> <p>u0FAE</p> <p>u0FAF</p> <p>u0FB0</p> <p>u0FB1</p> <t>u0FBB</t> <p>u0FB2</p> <t>u0FBC</t> <p>u0FB3</p> <p>u0FB4</p> <t>u0FB5</t> <p>u0FB6</p> <p>u0FB7</p> <p>u0FB8</p> <reset>u0F39</reset> <s>u0F84</s> <s>u0F71</s> <s>u0F39</s> <s>u0F7F</s> <s>u0F85</s> <s>u0F88</s> <s>u0F89</s> <s>u0F8A</s> <s>u0F8B</s> <reset>u0FB2u0F71u0F80=u0F77</reset> <reset>u0FB3u0F71u0F80=u0F79</reset> <reset>u0F51u0F42u0F42u0F66</reset> <t>u0F51u0F42u0F4A</t> <t>u0F51u0F42u0F4C</t> <reset>u0F56u0F42u0F42u0F66</reset> <t>u0F56u0F42u0F4A</t> <t>u0F56u0F42u0F4C</t> <reset>u0F60u0F42u0F42u0F66</reset> <t>u0F60u0F42u0F4A</t> <t>u0F60u0F42u0F4C</t> <reset>u0F51u0F44u0F42u0F66</reset> <t>u0F51u0F44u0F4A</t> <t>u0F51u0F44u0F4C</t> <reset>u0F58u0F44u0F42u0F66</reset> <t>u0F58u0F44u0F4A</t> <t>u0F58u0F44u0F4C</t> <reset>u0F42u0F51u0F42u0F66</reset> <t>u0F42u0F51u0F4A</t> <t>u0F42u0F51u0F4C</t> <reset>u0F56u0F51u0F42u0F66</reset> <t>u0F56u0F51u0F4A</t> <t>u0F56u0F51u0F4C</t> <reset>u0F58u0F51u0F42u0F66</reset> <t>u0F58u0F51u0F4A</t> <t>u0F58u0F51u0F4C</t> <reset>u0F60u0F51u0F42u0F66</reset> <t>u0F60u0F51u0F4A</t> <t>u0F60u0F51u0F4C</t> <reset>u0F42u0F53u0F42u0F66</reset> <t>u0F42u0F53u0F4A</t> <t>u0F42u0F53u0F4C</t> <reset>u0F58>u0F53u0F42u0F66</reset> <t>u0F58u0F53u0F4A</t> <t>u0F58u0F53u0F4C</t> <reset>u0F51u0F54u0F42u0F66</reset> <t>u0F51u0F54u0F4A</t> <t>u0F51u0F54u0F4C</t> <reset>u0F51u0F56u0F42u0F66</reset> <t>u0F51u0F56u0F4A</t> <t>u0F51u0F56u0F4C</t> <reset>u0F60u0F56u0F42u0F66</reset> <t>u0F60u0F56u0F4A</t> <t>u0F60u0F56u0F4C</t> <reset>u0F51u0F58u0F42u0F66</reset> <t>u0F51u0F58u0F4A</t> <t>u0F51u0F58u0F4C</t> <reset>u0F42u0F66u0F42u0F66</reset> <t>u0F42u0F66u0F4A</t> <t>u0F42u0F66u0F4C</t> <reset>u0F56u0F66u0F42u0F66</reset> <t>u0F56u0F66u0F4A</t> <t>u0F56u0F66u0F4C</t> <reset>u0FBF</reset> <p>u0F00</p> <reset>u0EC6</reset> <p>u0F0B</p> <t>u0F0C</t> <s>u0F0D</s> <s>u0F0E</s> <s>u0F0F</s> <s>u0F10</s> <s>u0F11</s> <s>u0F14</s> <s>u0F34</s> <s>A</s> </rules>

5. Then close the ucs2 collation tag with

</collation>

6. Now find the <charset name="utf8"> tag.

7. Under

<collation name="utf8_bin" id="83"> <flag>binary</flag> <flag>compiled</flag> </collation>

and before the </charset> tag add the following utf8 start collation tag:

<collation name="utf8_dzongkha_ci" id="210"> <! Dzongkha experimental collation >

The id has to be higher than the last utf8 id, which at the time of the writing of this article was 209. You can easily check by running the SQL query:

SELECT collation_name, id FROM information_schema.collations WHERE character_set_name='utf8' ORDER BY id;

8. After the opening collation tag, add exactly the same collation rules as in step 4.

9. Finally close the utf8 collation tag with

</collation>

10. Now restart MySQL and you will be all set! Running the SQL statements mentioned in steps 3 and step 7 should now include ucs2_dzongkha_ci and utf8_dzongkha_ci, which you can readily use for any field which is going to store Dzongkha or Tibetan Unicode.