рдкрд╣рд▓рд╛ рднрд╛рдЧ рдПрдХ
рдкрд░рд┐рдЪрдп рд╣реИ ред
рджреВрд╕рд░рд╛ рднрд╛рдЧ рдПрдХ
рддреНрд╡рд░рд┐рдд рд╢реБрд░реБрдЖрдд рд╣реИ ред
рддреАрд╕рд░рд╛ рднрд╛рдЧ рд╣реИ
рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ ред
рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ Habr├й рдкрд░ рдкрд╣рд▓реЗ рднреА рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛ рдЪреБрдХреА рд╣реИ, рдХреБрдЫ рдкреНрд░рдореБрдЦ рдЪреАрдЬреЛрдВ рдХреЛ рдирд╣реАрдВ рджреЗрдЦрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рд▓реЗрдЦ "рд╡рд┐рд╖рдп рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реИред" рдкрд░рд┐рд╡рд░реНрдзрди / рд╕реБрдзрд╛рд░ рдкрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рд╕реНрд╡рд╛рдЧрдд рдпреЛрдЧреНрдп рд╣реИрдВред
рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЛ рдлреЙрд░реНрдореЗрдЯ рдХрд░реЗрдВ
SQLite рдбреЗрдЯрд╛рдмреЗрд╕ UTF-8 рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдпрд╛ UTF-16 рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдкрд╛рда (рд╕реНрдЯреНрд░рд┐рдВрдЧ рдорд╛рди) рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред 16-рдмрд┐рдЯ UTF-16 рд╡рд░реНрдгреЛрдВ рдореЗрдВ рдмрд╛рдЗрдЯ рдСрд░реНрдбрд░ рдЫреЛрдЯреЗ-рдПрдВрдбрд┐рдпрди рдпрд╛ рдмрдбрд╝реЗ-рдПрдВрдбрд┐рдпрди рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
рдпрд╣реА рд╣реИ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ
рддреАрди рдЕрд▓рдЧ-рдЕрд▓рдЧ SQLite рдбреЗрдЯрд╛рдмреЗрд╕ рдкреНрд░рд╛рд░реВрдк рд╣реИрдВ:
UTF-8, UTF-16le, UTF-16be ред
рдЗрдирдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рднреА рдкреНрд░рд╛рд░реВрдк рдХрд╛ рдХрд┐рд╕реА рднреА рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдпрд╛рдиреА, рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИ рдХрд┐ x86 рдкрд░ UTF-16be рдкреНрд░рд╛рд░реВрдк рдХреЗ рд╕рд╛рде рдПрдХ рдЖрдзрд╛рд░ рдмрдирд╛рдиреЗ рд╕реЗ рд░реЛрдХрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдЕрдиреБрдЪрд┐рдд рд╣реИ, рдиреАрдЪреЗ рджреЗрдЦреЗрдВ)ред
рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХрд╛ рдкреНрд░рд╛рд░реВрдк рдПрдХ
рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗрдЯрд┐рдВрдЧ рд╣реИ рдЬрд┐рд╕реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдмрдирд╛рдиреЗ рд╕реЗ
рдкрд╣рд▓реЗ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдбреЗрдЯрд╛рдмреЗрд╕ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рдж,
рдЖрдк рдкреНрд░рд╛рд░реВрдк
рдХреЛ рдирд╣реАрдВ рдмрджрд▓
рд╕рдХрддреЗ рд╣реИрдВ ; рдЗрд╕реЗ рдЪреБрдкрдЪрд╛рдк рдХрд░рдиреЗ рдХреЗ рдкреНрд░рдпрд╛рд╕реЛрдВ рдХреЛ SQLite рдХрд░реНрдиреЗрд▓ рджреНрд╡рд╛рд░рд╛ рдЕрдирджреЗрдЦрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЗрд╕ рдкреНрд░рдХрд╛рд░,
SQLite рдбреЗрдЯрд╛рдмреЗрд╕ рдкрдВрдХреНрддрд┐ рдкреНрд░рд╛рд░реВрдк рдирд┐рдореНрди рдореЗрдВ рд╕реЗ рдПрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:
- UTF-8 (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ);
- UTF-16le (x86 рдХрд╛ рдореВрд▓);
- UTF-16be
рдФрд░ рдЖрдк рдбреЗрдЯрд╛рдмреЗрд╕ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рдж рдЗрд╕реЗ рдмрджрд▓ рдирд╣реАрдВ рд╕рдХрддреЗредрдиреЛрдЯ1. UTF-8 рдФрд░ UTF-16 ("рд╕рд░реЛрдЧреЗрдЯ рдкреЗрдпрд░" рджреЗрдЦреЗрдВ) рдПрдХ рд╡рд░реНрдг рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рдЗрдЯреНрд╕ рдХреА рдПрдХ рдЪрд░ (рдЧреИрд░-рдирд┐рд╢реНрдЪрд┐рдд) рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
2. рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд▓рд┐рдП, рдЖрдк рдХреЗрд╡рд▓ рдПрдХ рд╣реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рд╛рд░реВрдк рдХреЗ рд╕рд╛рде рдЖрдзрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрдиреНрдпрдерд╛ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реЛрдЧреАред
3. SQLite рдХреЗ рдЖрдкрдХреЗ рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ, UTF-16 рд╕рдорд░реНрдерди рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рджреМрд░рд╛рди "рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛" рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (
SQLITE_OMIT_UTF16 рдХреЗ рд▓рд┐рдП sqlite3.c рджреЗрдЦреЗрдВ)ред
рдПрдкреАрдЖрдИ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрд╛рд░ рдЧреБрдЬрд░ рд░рд╣рд╛ рд╣реИ
SQLite API рдХреЙрд▓ (рд╕реА рднрд╛рд╖рд╛ рдореЗрдВ) рдХреЛ рджреЛ рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: UTF-16 рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ (рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХреЗ рд▓рд┐рдП рджреЗрд╢реА рдмрд╛рдЗрдЯ рдСрд░реНрдбрд░) рдФрд░ UTF-8 рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рддрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
int sqlite3_prepare_v2( sqlite3 *db, const char *zSql, int nByte, sqlite3_stmt **ppStmt, const char **pzTail ); int sqlite3_prepare16_v2( sqlite3 *db, const void *zSql, int nByte, sqlite3_stmt **ppStmt, const void **pzTail );
рдпрджрд┐ рдмреЗрд╕ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд╛ рдкреНрд░рд╛рд░реВрдк рдПрдкреАрдЖрдИ рдореЗрдВ рдкрд╛рд╕ рдХрд┐рдП рдЧрдП рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рдкреНрд░рд╛рд░реВрдк рд╕реЗ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддрд╛ рд╣реИ, рддреЛ рдкреНрд░реЗрд╖рд┐рдд рд╕реНрдЯреНрд░рд┐рдВрдЧ рдордХреНрдЦреА рдкрд░ рдмреЗрд╕ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛ рдЬрд╛рддреА рд╣реИред рдпрд╣ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЦрд░рд╛рдм рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдЙрдкрднреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЗрд╕реЗ рдмрдЪрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдХреЗрд╡рд▓ рдЗрд╕ рд╡рдЬрд╣ рд╕реЗ рдмреБрд░рд╛ рдирд╣реАрдВ рд╣реИ, рдиреАрдЪреЗ рджреЗрдЦреЗрдВред
Collation: рд╕реНрдЯреНрд░рд┐рдВрдЧ рддреБрд▓рдирд╛ рд╡рд┐рдзрд┐
рдЕрдЧрд▓рд╛ рд╡рд┐рд╖рдп рдПрдХ-рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рдХреНрд░рдо рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ (рдЖрд░реЛрд╣реА рдпрд╛ рдЕрд╡рд░реЛрд╣реА) рдФрд░ рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП "рдХреНрдпрд╛ рдпреЗ рджреЛрдиреЛрдВ рд░реЗрдЦрд╛рдПрдВ рд╕рдорд╛рди рд╣реИрдВ?" рджреЛ рд▓рд╛рдЗрдиреЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ "рдкреНрд░рд╛рдХреГрддрд┐рдХ" рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред рдХрдо рд╕реЗ рдХрдо, рд╕рд╡рд╛рд▓ рдЙрдарддрд╛ рд╣реИ: рдорд╛рдорд▓рд╛-рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдпрд╛ рдХреЗрд╕-рдЕрд╕рдВрд╡реЗрджрдирд╢реАрд▓ рддреБрд▓рдирд╛? рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХ рд╣реА рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕ рддрд░рд╣ рдХреА рддреБрд▓рдирд╛ рджреЛрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
SQLite рдореЗрдВ (рдФрд░ рдХрд┐рд╕реА рднреА рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ)
рдЯрдХрд░рд╛рд╡ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдкреЗрд╢ рдХреА рдЧрдИ рд╣реИ: рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рджреЛ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ред рдорд╛рдирдХ (рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд) рдЯрдХрд░рд╛рд╡ рд╣реИрдВ рдФрд░ рдЖрдк рдХрд┐рд╕реА рднреА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдЯрдХрд░рд╛рд╡ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдПрдХ рд╡рд┐рдзрд┐ рд╣реИ рдЬреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдП рдФрд░ рдмреА рдкреНрд░рд╛рдкреНрдд рдХрд░рддреА рд╣реИ рдФрд░ рддреАрди рдкрд░рд┐рдгрд╛рдореЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд▓реМрдЯрд╛рддреА рд╣реИ:
"рдкрдВрдХреНрддрд┐ A рдкрдВрдХреНрддрд┐ B рд╕реЗ рдХрдо рд╣реИ",
"рд▓рд╛рдЗрдиреНрд╕ рдП рдФрд░ рдмреА рдмрд░рд╛рдмрд░ рд╣реИрдВ",
"рдкрдВрдХреНрддрд┐ A рдкрдВрдХреНрддрд┐ B рд╕реЗ рдЕрдзрд┐рдХ рд╣реИ"редрд▓реЗрдХрд┐рди рдпрд╣ рд╕рдм рдирд╣реАрдВ рд╣реИред рддрд╛рд░ рдХреА рддреБрд▓рдирд╛
рд╕рдХрд░реНрдордХ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рдЕрдиреНрдпрдерд╛ рдпрд╣ рдХреБрдЫ рдорд╛рдиреНрдпрддрд╛рдУрдВ рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдЦреЛрдЬ рддрдВрддреНрд░ рдХреЛ "рддреЛрдбрд╝" рджреЗрдЧрд╛ред рдЕрдзрд┐рдХ рд╕рдЦреНрддреА рд╕реЗ: рд╕рднреА рд▓рд╛рдЗрдиреЛрдВ рдП, рдмреА рдФрд░ рд╕реА рдХреЗ рд▓рд┐рдП, рдЗрд╕рдХреА рдЧрд╛рд░рдВрдЯреА рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП:
1. рдпрджрд┐ = = рдмреА, рддреЛ рдмреА == рдПред
2. рдпрджрд┐ == рдмреА рдФрд░ рдмреА == рд╕реА, рддреЛ рдП == рд╕реАред
3. рдпрджрд┐ <B рддреЛ B> Aред
4 рдпрджрд┐ рдП <рдмреА рдФрд░ рдмреА <рд╕реА, рддреЛ рдП <рд╕реАредрдпрджрд┐ рдпрд╣ рдорд╛рдорд▓рд╛ рдирд╣реАрдВ рд╣реИ (рдпрд╛рдиреА, рдЖрдкрдиреЗ рдПрдХ рдРрд╕рд╛ рдХреЛрд▓рд╛рдЬ рдмрдирд╛рдпрд╛ рд╣реИ рдЬреЛ рдХрд┐рд╕реА рдПрдХ рдирд┐рдпрдо рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ), рддреЛ
"SQLite рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИ" ред
рдЖрдорддреМрд░ рдкрд░, рдЯрдХрд░рд╛рд╡ рдПрдХ рдЯреЗрдмрд▓ рдХреЙрд▓рдо рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЙрд╕ рдХреЙрд▓рдо рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХреА рддреБрд▓рдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдФрд░ рдЖрдкрдХреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рддреБрд▓рдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХрдм рд╣реИ?
1. рд╕реНрдЯреНрд░рд┐рдВрдЧ рдорд╛рдиреЛрдВ рджреНрд╡рд╛рд░рд╛ рд╕реВрдЪрдХрд╛рдВрдХ рдмрдирд╛рдиреЗ рдФрд░ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП;
2. "=", "<", ">" рдХреЗ рд╕рд╛рде рд╕реНрдЯреНрд░рд┐рдВрдЧ рдорд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде SQL рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреА рдЧрдгрдирд╛ рдХреЗ рджреМрд░рд╛рди
(
... рдЬрд╣рд╛рдВ рдирд╛рдо = 'рдРрд▓рд┐рд╕') ред
рдЗрд╕ рдкреНрд░рдХрд╛рд░,
рдЬрдм SQLite рдХреЛ рджреЛ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рдпрд╣ рддреБрд▓рдирд╛ рд╣рдореЗрд╢рд╛ рдХрд┐рд╕реА рди рдХрд┐рд╕реА рддрд░рд╣ рдХреЗ рдЯрдХрд░рд╛рд╡ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реЛрддреА рд╣реИредрдпрджрд┐ рддреБрд▓рдирд╛ рдХрд┐рдП рдЧрдП рддрд╛рд░реЛрдВ рдХрд╛ рдЯрдХрд░рд╛рд╡ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддрд╛ рд╣реИ, рддреЛ рджреВрд╕рд░реЗ рдкрд░ рдПрдХ рдЯрдХрд░рд╛рд╡ рдХреА рд╡рд░реАрдпрддрд╛ рдХреЗ рдЪрд╛рд▓рд╛рдХ рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдмреЗрд╣рддрд░ рдирд╣реАрдВ рд╣реИред
рдорд╛рдирдХ (рдПрдореНрдмреЗрдбреЗрдб) рдЯрдХрд░рд╛рд╡
рдХрд┐рд╕реА рднреА UNICODE рд╡рд░реНрдг (рдХреЗрд╕ рдЕрд╕рдВрд╡реЗрджрдирд╢реАрд▓) рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрд░реНрдг рд╕рдорд░реНрдерди рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдбреЗрдЯрд╛ (рддрд╛рд▓рд┐рдХрд╛рдУрдВ) рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред SQLite рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ рдХрд░реНрдиреЗрд▓ рдХреЛ "рдлреБрд▓рд╛рдпрд╛" рдирд╣реАрдВ рдХрд┐рдпрд╛ рдФрд░ рд╕рдмрд╕реЗ рд╕рд░рд▓ рддреБрд▓рдирд╛ рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рдмрдирд╛рдпрд╛ред
рддреАрди рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдЯрдХрд░рд╛рд╡ рд╣реИрдВ:
рджреНрд╡рд┐рдЖрдзрд╛рд░реА : рджреЛ рдореЗрдореЛрд░реА рдмреНрд▓реЙрдХ рдХреА рд╕рд╛рдорд╛рдиреНрдп рдмрд╛рдЗрдЯ-рд╡рд╛рд░ рддреБрд▓рдирд╛: рдкреБрд░рд╛рдирд╛, рдЕрдЪреНрдЫрд╛
рдореЗрдордЪрдореНрдк ()(рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рддрдм рддрдХ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдПрдХ рдФрд░ рдЯрдХрд░рд╛рд╡ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рди рд╣реЛ);
RTRIM : BINARY рдХреЗ рд╕рдорд╛рди, рд▓реЗрдХрд┐рди рдЕрдиреБрдЧрд╛рдореА рд░рд┐рдХреНрдд рд╕реНрдерд╛рди ('abc' = 'abc') рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рддрд╛ рд╣реИ;
NOCASE : BINARY рдХреЗ рд╕рдорд╛рди, рд▓реЗрдХрд┐рди 26 рд▓реИрдЯрд┐рди рдЕрдХреНрд╖рд░реЛрдВ (рдФрд░ рдХреЗрд╡рд▓ рдЙрдирдХреЗ рд▓рд┐рдП) рдХреЗ рд▓рд┐рдП рдорд╛рдорд▓реЗ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рддрд╛ рд╣реИред
рдорд╛рдирдХ рдЯрдХрд░рд╛рд╡ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
SQLite рдХреЗ рдЕрдВрджрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ рдФрд░ рд╡рд┐рднрд┐рдиреНрди рдЯрдХрд░рд╛рд╡ рдХреЗ рд▓рд┐рдП рддреБрд▓рдирд╛ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рджреЗрдЦреЗрдВред
BinCollFunc () рдлрд╝рдВрдХреНрд╢рдиред рдпрджрд┐
рдкреИрдбрдлреНрд▓реИрдЧ <> 0 рд╣реИ , рддреЛ рдпрд╣
RTRIM рддреБрд▓рдирд╛ рдХрд░рддрд╛ рд╣реИ, рдЕрдиреНрдпрдерд╛
BINARY :
static int allSpaces(const char *z, int n){ while( n>0 && z[n-1]==' ' ){ n--; } return n==0; } static int binCollFunc( void *padFlag, int nKey1, const void *pKey1, int nKey2, const void *pKey2 ){ int rc, n; n = nKey1<nKey2 ? nKey1 : nKey2; rc = memcmp(pKey1, pKey2, n); if( rc==0 ){ if( padFlag && allSpaces(((char*)pKey1)+n, nKey1-n) && allSpaces(((char*)pKey2)+n, nKey2-n) ){ }else{ rc = nKey1 - nKey2; } } return rc; }
рдФрд░ рдпрд╣рд╛рдБ
рдЯрдХрд░рд╛рд╡ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреНрд░рд┐рдВрдЧ рддреБрд▓рдирд╛ рд╕рдорд╛рд░реЛрд╣ рд╣реИ
NOCASE :
SQLITE_API int sqlite3_stricmp(const char *zLeft, const char *zRight){ register unsigned char *a, *b; a = (unsigned char *)zLeft; b = (unsigned char *)zRight; while( *a!=0 && UpperToLower[*a]==UpperToLower[*b]){ a++; b++; } return UpperToLower[*a] - UpperToLower[*b]; } SQLITE_API int sqlite3_strnicmp(const char *zLeft, const char *zRight, int N){ register unsigned char *a, *b; a = (unsigned char *)zLeft; b = (unsigned char *)zRight; while( N-- > 0 && *a!=0 && UpperToLower[*a]==UpperToLower[*b]){ a++; b++; } return N<0 ? 0 : UpperToLower[*a] - UpperToLower[*b]; }
рдХреНрдпрд╛ рдзреНрдпрд╛рди рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ? рдпрд╣ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ UTF-8 рдкреНрд░рд╛рд░реВрдк рд╣реИ, рд▓реЗрдХрд┐рди рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд╕рднреА рд╡рд░реНрдгреЛрдВ рдХреЛ рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: UTF-32 рдореЗрдВ рд╡рд░реНрдгреЛрдВ рдХрд╛ рдирд┐рд╖реНрдХрд░реНрд╖рдг рдФрд░ рд░реВрдкрд╛рдВрддрд░рдг рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред
рдпрджрд┐ рдЖрдк рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЗрд╕ рдХреЛрдб рдкрд░ рдзреНрдпрд╛рди рджреЗрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рд╕рдордЭ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐, рд╡рд┐рдЪрд┐рддреНрд░ рд░реВрдк рд╕реЗ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рдпрд╣ UTF-8 рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдФрд░ рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рдПрдХрд▓-рд╡рд░реНрдг рдПрдиреНрдХреЛрдбрд┐рдВрдЧ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
рд╡рд┐рдВрдбреЛрдЬрд╝ -1251 ) рджреЛрдиреЛрдВ рдкрд░ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред "рдРрд╕рд╛ рдХреНрдпреЛрдВ" рдХреА рд╕рдордЭ рдореЗрдВ рдЦреБрд▓рд╛рд╕реЗ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд╕рд╛рдЭрд╛ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ :)ред
рдпрд╣ рд╕реБрдЪрд╛рд░реВ рд░реВрдк рд╕реЗ рд╣рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдереАрд╕рд┐рд╕ рдХреА рд╕рдордЭ рдореЗрдВ рд▓рд╛рддрд╛ рд╣реИ
SQLite рдХреЛ UTF-8 рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдХреЛрдИ рджрд┐рд▓рдЪрд╕реНрдкреА рдирд╣реАрдВ рд╣реИ, рдЬрдм рддрдХ рдХрд┐ рдЗрд╕реЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ UTF-16 рдореЗрдВ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рди рд╣реЛ ред
рдмреЗрд╢рдХ, рдорд╛рдирдХ рдЯрдХрд░рд╛рд╡ рдХреЗ рд╕рд╛рде рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдпреВрдЯреАрдПрдл -8 рддрд╛рд░ рдХреА рд╡реНрдпрд╡рд╕реНрдерд╛ рдХрд░рдиреЗ рд╕реЗ рдЕрдЬреАрдм рдкрд░рд┐рдгрд╛рдо рдЙрддреНрдкрдиреНрди рд╣реЛрдВрдЧреЗред рд▓реЗрдХрд┐рди рд╕рдорд╛рдирддрд╛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧреА, рдФрд░ рддреБрд▓рдирд╛ рд╕рдХрд░реНрдордХ рд╣реЛрдЧреА рдФрд░ SQLite рдХреЛ рдмрд╛рдзрд┐рдд рдирд╣реАрдВ рдХрд░реЗрдЧреАред
рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЖрдк SQLite рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ,
рд╡рд┐рдВрдбреЛрдЬрд╝ -1251 рдХреЗ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдореЗрдВ, рдмрд╢рд░реНрддреЗ рдХрд┐ рдЖрдк рдХрд╣реАрдВ рднреА рдпреВрдЯреАрдПрдл -16 рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реЛрдВред рдпрд╣ SQL рдХреЗ рдЕрдВрджрд░ рджреЛрдиреЛрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╢рд╛рдмреНрджрд┐рдХреЛрдВ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдкреИрд░рд╛рдореАрдЯрд░ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╛рд░рд┐рдд рддрд╛рд░ред
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкреНрд░рд╛рд░реВрдк рдХреЗ рд░реВрдк рдореЗрдВ UTF-8 рдкреНрд░рд╛рд░реВрдк рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рддрд░реНрдХ
рдЪрд▓реЛ
sqlite3Prepare16 () API рдлрд╝рдВрдХреНрд╢рди рдХреЛрдб рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ, рдЬреЛ SQL рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХреЛ рдкрд╛рд░реНрд╕ рдФрд░ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИред рд╣рдо рдлрд╝рдВрдХреНрд╢рди рдмреЙрдбреА рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВред
static int sqlite3Prepare16( sqlite3 *db, const void *zSql, int nBytes, int saveSqlFlag, sqlite3_stmt **ppStmt, const void **pzTail ){ ...
рд╡рд╣ рд╣реИ,
UTF-16 рдкреНрд░рд╛рд░реВрдк рдореЗрдВ SQL рдХрдердиреЛрдВ рдХрд╛ рдкрд╛рд░реНрд╕рд░ рд╡рд░реНрддрдорд╛рди рдореЗрдВ SQLite рдХрд░реНрдиреЗрд▓ рдореЗрдВ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ (рдЬреЛ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЗрд╕рдХреЗ рд╕реНрд╡рд░реВрдк рдХреЛ рдмрд╛рд╣рд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ) ред
рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ SQL рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рд╡рд╛рд▓рд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧ UTF-16 рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдкреНрд░рд╕рд╛рд░рд┐рдд рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ
рд╣рдореЗрд╢рд╛ UTF-8 рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЗрд╕ рдкреНрд░рдХрд╛рд░, UTF-8 рдкреНрд░рд╛рд░реВрдк рдХреЗ рдкрдХреНрд╖ рдореЗрдВ:
- SQL рд╕рдВрдХрд▓рд┐рдд рдХрд░рддреЗ рд╕рдордп рдХреЛрдИ рдЕрддрд┐рд░рд┐рдХреНрдд рд░реВрдкрд╛рдВрддрд░рдг рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ;
- рдбреЗрдЯрд╛ (рдЖрдорддреМрд░ рдкрд░) рдХрдо рдбрд┐рд╕реНрдХ рд╕реНрдерд╛рди рд▓реЗрддрд╛ рд╣реИ;
- рдпрджрд┐ рдЖрдк UTF-16 рдХрд╣реАрдВ рднреА рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдП рдЧрдП рд╣реИрдВ (рдФрд░ рд╕реНрд╡-рд▓рд┐рдЦрд┐рдд рдЯрдХрд░рд╛рд╡ рдирдП рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рд╛рд░реВрдк рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддрд╛ рд╣реИ) рддреЛ рдЖрдк рдХрд┐рд╕реА рднреА рдмрд╛рдЗрдЯ-рдмрд╛рдп-рдХреИрд░реЗрдХреНрдЯрд░ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдореЗрдВ рдбреЗрдЯрд╛ рд╕реНрдЯреЛрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдХреИрд╕реЗ рдмрдирд╛рдПрдВ рдФрд░ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЯрдХрд░рд╛рд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
рд╣рдо
sqlite3_create_collation_v2 () API
рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:
int sqlite3_create_collation_v2( sqlite3*, // const char *zName, // int eTextRep, // void *pArg, // custom- int(*xCompare)(void*,int,const void*,int,const void*),
ETextRep рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ,
рдЖрдкрдХреЛ рдпрд╣ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдХрд┐рд╕ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд▓рд╛рдЗрдиреЗрдВ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╣реИрдВ:
SQLITE_UTF8 = 1; SQLITE_UTF16 = 2; SQLITE_UTF16BE = 3; SQLITE_UTF16LE = 4; SQLITE_ANY = 5;
рдЖрдк рдПрдХ рд╣реА рдЯрдХрд░рд╛рд╡ рдХреЗ рд▓рд┐рдП рдХрдИ рдХрд╛рд░реНрдп рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡рд┐рднрд┐рдиреНрди рд╕реНрд╡рд░реВрдкреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ред
SQLite рдкреНрд░рд╛рд░реВрдк рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдзрд┐ рдЪреБрдирдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ, рдЕрдиреНрдпрдерд╛ (рдпрджрд┐ рд╕рдВрдЪрд░рд┐рдд рд╕реНрдЯреНрд░рд┐рдВрдЧ рдФрд░ рдкрдВрдЬреАрдХреГрдд рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкреНрд░рд╛рд░реВрдк рдЕрд▓рдЧ рд╣реИрдВ), рддреЛ рд░реВрдкрд╛рдВрддрд░рдг рдлрд┐рд░ рд╕реЗ рдордХреНрдЦреА рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рддреБрд▓рдирд╛рддреНрдордХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдПрдХ рдЛрдгрд╛рддреНрдордХ рд╕рдВрдЦреНрдпрд╛ рд▓реМрдЯрд╛рдиреА рдЪрд╛рд╣рд┐рдП рдпрджрд┐ рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рджреВрд╕рд░реА рд╕реЗ рдХрдо рд╣реЛ; рд╢реВрдиреНрдп - рдпрджрд┐ рд░реЗрдЦрд╛рдПрдВ рд╕рдорд╛рди рд╣реИрдВ; рдПрдХ рд╕рдХрд╛рд░рд╛рддреНрдордХ рд╕рдВрдЦреНрдпрд╛ рдЕрдЧрд░ рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рджреВрд╕рд░реА рд╕реЗ рдмрдбрд╝реА рд╣реИред рддреБрд▓рдирд╛, рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рд╣реА рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╕рдХрд░реНрдордХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдПрдХ рдХреЛрд▓рд╛рдЬ рдмрдирд╛рдПрдВ ("RU" рдирд╛рдо) рдЬреЛ рд╣рдореЗрдВ рджреЗрдЧрд╛:
- рд╕рд┐рд░рд┐рд▓рд┐рдХ рдФрд░ рд▓реИрдЯрд┐рди рдЕрдХреНрд╖рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдХреЗрд╕-рдЕрд╕рдВрд╡реЗрджрдирд╢реАрд▓ рддреБрд▓рдирд╛
- рдЕрдиреНрдп рд╕рднреА рдкрд╛рддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рддреБрд▓рдирд╛;
- рдЕрдХреНрд╖рд░ "(" рдХреА рд╡рд░реНрдгрдорд╛рд▓рд╛ рдореЗрдВ рд╕рд╣реА рд╕реНрдерд┐рддрд┐ (рдЕрдзрд┐рдХ рд╕рдЯреАрдХ, "position" рдХреЛ "рдИ" рдХреЗ рдмрд░рд╛рдмрд░ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ)ред
рдпрд╣, рдЕрдм рддрдХ, рдкреВрд░реНрдг UNICODE рд╕рдорд░реНрдерди рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рд╕рд░рд▓ рд╕рдорд╛рдзрд╛рди рд╣реИ рдЬреЛ 95% рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЙрдкрдпреБрдХреНрдд рд╣реИред
рдбреЗрд▓реНрдлреА рдкрд░ рдЙрджрд╛рд╣рд░рдг рд╣реЛрдВрдЧреЗ, рдШрдмрд░рд╛рдПрдВ рдирд╣реАрдВред
unit UnicodeUnit; interface
рдХреЛрдб, рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ, рд╕рд░рд▓ рд╣реИ рдФрд░ рд╢рд╛рдпрдж рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рдХреИрд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:
рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рддреЗ рд╕рдордп, рд╣рдо
рдирд╛рдо рд╕реНрддрдВрдн рдХреЗ рд▓рд┐рдП рддреБрд▓рдирд╛ рдкреНрд░рдХрд╛рд░ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ:
CREATE TABLE foo( name TEXT COLLATE RU, ... )
рдорд╣рддреНрд╡рдкреВрд░реНрдг!
рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдХреЛрд▓рд╛рдЬрд╝ рдкрдВрдЬреАрдХрд░рдг рдХрд┐рдпрд╛ рдЬрд╛рддрд╛
рд╣реИ (рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╣реА рдирд╣реАрдВ)ред рдпрд╣ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдЖрдкрдХреЗ рдХреЛрдб рдХреЛ SQLite рдХреЛрдб рдореЗрдВ рд╕рдВрд▓рдЧреНрди рдХрд░ рд░рд╣рд╛ рд╣реИред рдПрдХ рдФрд░ рдХрдиреЗрдХреНрд╢рди рдЬреЛ рд╕рдорд╛рди рдХреЛрд▓рд╛рдЬ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рдерд╛, рд╡рд╣ рдЗрд╕ рдЖрдзрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдЧрд╛ред
LIKE, рдЕрдкрд░ (), рд▓реЛрдЕрд░ (), рдЖрджрд┐ред
рдмреЗрд╢рдХ, "RU" рдХреЛрдб, рдЕрдиреНрдп рд╡рд░реНрдгрдорд╛рд▓рд╛рдУрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред рдФрд░ рдЖрдк рдПрдХ (рд▓рдЧрднрдЧ) рдкреВрд░реНрдг UNICODE рддреБрд▓рдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ рдЖрдк рд▓реЛрдЕрд░рдЯреЗрдмрд▓ рдЯреЗрдмрд▓ рдХреЛ рдЖрдмрд╛рдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдВрдбреЛрдЬ рдПрдкреАрдЖрдИ рдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
рдХреНрдпреЛрдВ "рд▓рдЧрднрдЧ"? UNICODE рдХреЗ "рд╕рд╛рдорд╛рдиреНрдпреАрдХрд░рдг" рдХреЗ рд░реВрдк рдореЗрдВ рдРрд╕реА рдПрдХ рдЪреАрдЬ рд╣реИ, рдЬреЛ рдХрд┐ рдПрдХ рдЕрд╕реНрдкрд╖реНрдЯ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдореЗрдВ рдХрдореА рд╣реИред рдмрдЪрд╛рд╡ рдХреЗ рд▓рд┐рдП рдЧреВрдЧрд▓!рд╣рд╛рд▓рд╛рдБрдХрд┐, UNICODE рдХрд╛ рд╕рдорд░реНрдерди рдХреЗрд╡рд▓ рдХреЛрд▓рд╛рдЬреЗрд╢рди рдореЗрдВ рд╣реА рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИред рдпрд╣ рднреА рд╣реИ:
- LIKE рдСрдкрд░реЗрдЯрд░ (рдкреИрдЯрд░реНрди рдорд┐рд▓рд╛рди);
- SQL рдлрдВрдХреНрд╢рди
рд▓реЛрдЕрд░ () рдФрд░
рдЕрдкрд░ () (рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреИрд░реЗрдХреНрдЯрд░ рдХреЛ рд▓реЛрдЕрд░ / рдЕрдкрд░ рдХреЗрд╕ рдореЗрдВ рдХрдиреНрд╡рд░реНрдЯ рдХрд░рддрд╛ рд╣реИ)ред
рдФрд░ рдХреБрдЫ рдЕрдиреНрдп рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реЗрд░рдлреЗрд░ рдлрд╝рдВрдХреНрд╢рди:
рдЧреБрдирд╛ (), рд╢реАрд░реНрд╖рдХ () , рдЖрджрд┐ред
рдпреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ
рддрдВрддреНрд░ рд╣реИрдВ рдЬреЛ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдЯрдХрд░рд╛рд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред
рд╣рд╛рд▓рд╛рдБрдХрд┐, SQLite рдЗрди рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ (LIKE рднреА рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ)ред
рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП,
sqlite3_create_function_v2 () API рдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
рд▓рдЧрднрдЧ рдкреВрд░реНрдг рд░реВрдк рд╕реЗ рдЫреЛрдЯреЗ рдЦреВрди рд╕реЗ рднрд░реЗ рд╣реБрдП
рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦреЛрдВ рдореЗрдВ
рдЖрдИрд╕реАрдпреВ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛
: рдпреВрдирд┐рдХреЛрдб рдХреЗ рд▓рд┐рдП рдЕрдВрддрд░реНрд░рд╛рд╖реНрдЯреНрд░реАрдп рдШрдЯрдХ ред рдпрд╣ UNICODE рдХрд╛ рдкреВрд░реНрдг рд╕рдорд░реНрдерди рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдкрд░реЗрд╢рд╛рдиреА рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рд╡рд┐рд╢рд╛рд▓ рдорд╛рддреНрд░рд╛ рдореЗрдВ рдХреЛрдб рдФрд░ рдбреЗрдЯрд╛ рдЦреАрдВрдЪрддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ 95% рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рдЖрдкрдХреА SQLite рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд ICU рд╣реИ, рддреЛ рдЖрдк рдЖрдЧреЗ рдкрдврд╝рдирд╛ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред
рддреЛ, рдПрдХ рд╕реНрдорд╛рд░реНрдЯ рд▓рдбрд╝рдХрд╛ рдерд╛ рдЬрд┐рд╕рдиреЗ рдЗрд╕ рдХреЛрдб рд╕реЗ рдХреНрдпрд╛ рдЬрд░реВрд░рдд рдереА, рдпрд╣ рджреЗрдЦрд╛ рдФрд░ рдЖрдИрд╕реАрдпреВ рд╕реЗ рдПрдХ рддрд░рд╣ рдХрд╛ "рдирд┐рдЪреЛрдбрд╝" рдмрдирд╛рдпрд╛ред
рдЙрдирдХрд╛ рдореВрд▓ рд╕рдВрджреЗрд╢, рдЬрд╛рд╣рд┐рд░рд╛ рддреМрд░ рдкрд░,
рдпрд╣ рд╣реИ ред
рдпрд╣ рдЗрд╕реА рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред ICU рдХреЛрдб рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдЙрдиреНрд╣реЛрдВрдиреЗ
sqlite3_unicode.c рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдИ, рдЬреЛ DLL (рдЖрдорддреМрд░ рдкрд░
sqlite3u.dll ) рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рд╣реЛрддреА рд╣реИред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк DLL
sqlite3_unicode_init () рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдирд┐рд░реНрдпрд╛рдд рдХрд░рддрд╛ рд╣реИ:
function sqlite3_unicode_init(db: TSQLiteDB): Integer; cdecl; external 'sqlite3u.dll' name 'sqlite3_unicode_init';
рдпрджрд┐ рдЖрдк рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣:
- рдирд┐рдЪрд▓реЗ, рдКрдкрд░реА, рдЧреБрдирд╛, рд╢реАрд░реНрд╖рдХ, рдЕрд╕реНрд╡реАрдХрд╛рд░реНрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЗ
рд▓рдЧрднрдЧ рдкреВрд░реНрдг UNICODE рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рддрд╛ рд╣реИ;
- рдПрдХ
рд▓рдЧрднрдЧ рдкреВрд░реНрдг UNICODE рдХреЗрд╕-рдЕрд╕рдВрд╡реЗрджрдирд╢реАрд▓ LIKE рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрддрд╛ рд╣реИред
рдЗрд╕ DLL рдХрд╛ рдЖрдХрд╛рд░ рдХреЗрд╡рд▓ 80 Kb рд╣реИ рдФрд░ рдпрд╣ рдЬрд▓реНрджреА рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ (рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред рдЦрдВрдб "рд▓рдЧрднрдЧ" рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ - рдпрд╣ рдПрдХ рдкреВрд░реНрдг UNICODE рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди 95% рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдпрд╣ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред
рдиреЛрдЯреНрд╕ред
1. рдпрджрд┐ LIKE рдУрд╡рд░рд░рд╛рдЗрдб рд╣реЛ рдЧрдпрд╛ рд╣реИ, рддреЛ SQLite рдЗрдВрдбреЗрдХреНрд╕ рджреНрд╡рд╛рд░рд╛ рдЗрд╕реЗ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝ рдирд╣реАрдВ рдХрд░ рдкрд╛рдПрдЧрд╛ (A LIKE 'XXX%', A рджреНрд╡рд╛рд░рд╛ рдЗрдВрдбреЗрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рдпрджрд┐ рдХреЛрдИ рд╣реЛ)ред
2. рдлрд╝рдВрдХреНрд╢рдВрд╕ рд▓реЛрдЕрд░ (), рдЕрдкрд░ (), рдЖрджрд┐, рдЖрдо рддреМрд░ рдкрд░ рдмреЛрд▓рдирд╛, рдбреЗрдЯрд╛рдмреЗрд╕ рдЗрдВрдЬрди рдореЗрдВ рд╣реЛрдирд╛ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ, рдЗрди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛрдб рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред
Yuz zis librari et yor oun рдЬреЛрдЦрд┐рдо ,
рдЕрд░реНрдерд╛рддреН , рдЗрд╕ рд▓реЗрдЦ рдХреЗ рд▓реЗрдЦрдХ рдХрднреА рднреА рдХрд┐рд╕реА рдЪреАрдЬ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рдирд╣реАрдВ рд╣реИрдВред