[sisyphus] странное и некрасивое поведение utf8 в паре rails/mysql

Michael Bykov m.bykov на gmail.com
Ср Июн 24 20:31:40 MSD 2009


Вторая строка - корректный результат, первая загадочна:

первая буква слова в поле wo_stress, по которому я ищу, ἰ = 0xF130, а
в значении, которое mysql нашёл, ἱ = 0x1F31. То есть это разные
строки!

>> Dict.find_all_by_wo_stress "ἰκετευω"
=> [#<Dict id: 81723, parent_id: nil, group_id: nil, variant_id: nil,
word: "ἱκετεύω", wo_stress: "ἱκετευω", plain: "ἱκετευω", raw_lsj:
"ἱκετεύω, fut. -σω E.IA462 (cj. Markl.), ...", raw_dvr: nil>]

>> Dict.find_all_by_wo_stress "ἱκετευω"
=> [#<Dict id: 81723, parent_id: nil, group_id: nil, variant_id: nil,
word: "ἱκετεύω", wo_stress: "ἱκετευω", plain: "ἱκετευω", raw_lsj:
"ἱκετεύω, fut. -σω E.IA462 (cj. Markl.), ...", raw_dvr: nil>]

Случайно обнаружил, никакие другие символы в подобном поведении не
замечены, всё уже долгое время работает корректно!

Куда рыть?

libMySQL-devel-5.0.67-alt1
MySQL-server-5.0.67-alt1
MySQL-client-5.0.67-alt1
libMySQL-5.0.67-alt1


mysql> show variables;
+---------------------------------+-----------------------------------------------------------+
| Variable_name                   | Value
                       |
+---------------------------------+-----------------------------------------------------------+
| auto_increment_increment        | 1
                       |
| auto_increment_offset           | 1
                       |
| automatic_sp_privileges         | ON
                       |
| back_log                        | 50
                       |
| basedir                         | /usr/
                       |
| bdb_cache_size                  | 8384512
                       |
| bdb_home                        | /db/
                       |
| bdb_log_buffer_size             | 262144
                       |
| bdb_logdir                      | /log
                       |
| bdb_max_lock                    | 10000
                       |
| bdb_shared_data                 | OFF
                       |
| bdb_tmpdir                      | /tmp/
                       |
| binlog_cache_size               | 32768
                       |
| bulk_insert_buffer_size         | 8388608
                       |
| character_set_client            | latin1
                       |
| character_set_connection        | latin1
                       |
| character_set_database          | utf8
                       |
| character_set_filesystem        | binary
                       |
| character_set_results           | latin1
                       |
| character_set_server            | utf8
                       |
| character_set_system            | utf8
                       |
| character_sets_dir              | /usr/share/mysql/charsets/
                       |
| collation_connection            | latin1_swedish_ci
                       |
| collation_database              | utf8_general_ci
                       |
| collation_server                | utf8_general_ci
                       |
| completion_type                 | 0
                       |
| concurrent_insert               | 1
                       |
| connect_timeout                 | 10
                       |
| datadir                         | /db/
                       |
| date_format                     | %Y-%m-%d
                       |
| datetime_format                 | %Y-%m-%d %H:%i:%s
                       |
| default_week_format             | 0
                       |
| delay_key_write                 | ON
                       |
| delayed_insert_limit            | 100
                       |
| delayed_insert_timeout          | 300
                       |
| delayed_queue_size              | 1000
                       |
| div_precision_increment         | 4
                       |
| keep_files_on_create            | OFF
                       |
| engine_condition_pushdown       | OFF
                       |
| expire_logs_days                | 0
                       |
| flush                           | OFF
                       |
| flush_time                      | 0
                       |
| ft_boolean_syntax               | + -><()~*:""&|
                       |
| ft_max_word_len                 | 84
                       |
| ft_min_word_len                 | 4
                       |
| ft_query_expansion_limit        | 20
                       |
| ft_stopword_file                | (built-in)
                       |
| group_concat_max_len            | 1024
                       |
| have_archive                    | YES
                       |
| have_bdb                        | YES
                       |
| have_blackhole_engine           | YES
                       |
| have_compress                   | YES
                       |
| have_crypt                      | YES
                       |
| have_csv                        | NO
                       |
| have_dynamic_loading            | YES
                       |
| have_example_engine             | NO
                       |
| have_federated_engine           | NO
                       |
| have_geometry                   | YES
                       |
| have_innodb                     | YES
                       |
| have_isam                       | NO
                       |
| have_merge_engine               | YES
                       |
| have_ndbcluster                 | NO
                       |
| have_openssl                    | DISABLED
                       |
| have_ssl                        | DISABLED
                       |
| have_query_cache                | YES
                       |
| have_raid                       | NO
                       |
| have_rtree_keys                 | YES
                       |
| have_symlink                    | YES
                       |
| hostname                        | mbnote.rinet.net
                       |
| init_connect                    |
                       |
| init_file                       |
                       |
| init_slave                      |
                       |
| innodb_additional_mem_pool_size | 1048576
                       |
| innodb_autoextend_increment     | 8
                       |
| innodb_buffer_pool_awe_mem_mb   | 0
                       |
| innodb_buffer_pool_size         | 8388608
                       |
| innodb_checksums                | ON
                       |
| innodb_commit_concurrency       | 0
                       |
| innodb_concurrency_tickets      | 500
                       |
| innodb_data_file_path           | ibdata1:10M:autoextend
                       |
| innodb_data_home_dir            |
                       |
| innodb_adaptive_hash_index      | ON
                       |
| innodb_doublewrite              | ON
                       |
| innodb_fast_shutdown            | 1
                       |
| innodb_file_io_threads          | 4
                       |
| innodb_file_per_table           | OFF
                       |
| innodb_flush_log_at_trx_commit  | 1
                       |
| innodb_flush_method             |
                       |
| innodb_force_recovery           | 0
                       |
| innodb_lock_wait_timeout        | 50
                       |
| innodb_locks_unsafe_for_binlog  | OFF
                       |
| innodb_log_arch_dir             |
                       |
| innodb_log_archive              | OFF
                       |
| innodb_log_buffer_size          | 1048576
                       |
| innodb_log_file_size            | 5242880
                       |
| innodb_log_files_in_group       | 2
                       |
| innodb_log_group_home_dir       | ./
                       |
| innodb_max_dirty_pages_pct      | 90
                       |
| innodb_max_purge_lag            | 0
                       |
| innodb_mirrored_log_groups      | 1
                       |
| innodb_open_files               | 300
                       |
| innodb_rollback_on_timeout      | OFF
                       |
| innodb_support_xa               | ON
                       |
| innodb_sync_spin_loops          | 20
                       |
| innodb_table_locks              | ON
                       |
| innodb_thread_concurrency       | 8
                       |
| innodb_thread_sleep_delay       | 10000
                       |
| interactive_timeout             | 28800
                       |
| join_buffer_size                | 131072
                       |
| key_buffer_size                 | 8384512
                       |
| key_cache_age_threshold         | 300
                       |
| key_cache_block_size            | 1024
                       |
| key_cache_division_limit        | 100
                       |
| language                        | /usr/share/mysql/english/
                       |
| large_files_support             | ON
                       |
| large_page_size                 | 0
                       |
| large_pages                     | OFF
                       |
| lc_time_names                   | en_US
                       |
| license                         | GPL
                       |
| local_infile                    | ON
                       |
| locked_in_memory                | OFF
                       |
| log                             | OFF
                       |
| log_bin                         | OFF
                       |
| log_bin_trust_function_creators | OFF
                       |
| log_error                       |
                       |
| log_queries_not_using_indexes   | OFF
                       |
| log_slave_updates               | OFF
                       |
| log_slow_queries                | OFF
                       |
| log_warnings                    | 1
                       |
| long_query_time                 | 10
                       |
| low_priority_updates            | OFF
                       |
| lower_case_file_system          | OFF
                       |
| lower_case_table_names          | 0
                       |
| max_allowed_packet              | 1048576
                       |
| max_binlog_cache_size           | 4294963200
                       |
| max_binlog_size                 | 1073741824
                       |
| max_connect_errors              | 10
                       |
| max_connections                 | 100
                       |
| max_delayed_threads             | 20
                       |
| max_error_count                 | 64
                       |
| max_heap_table_size             | 16777216
                       |
| max_insert_delayed_threads      | 20
                       |
| max_join_size                   | 18446744073709551615
                       |
| max_length_for_sort_data        | 1024
                       |
| max_prepared_stmt_count         | 16382
                       |
| max_relay_log_size              | 0
                       |
| max_seeks_for_key               | 4294967295
                       |
| max_sort_length                 | 1024
                       |
| max_sp_recursion_depth          | 0
                       |
| max_tmp_tables                  | 32
                       |
| max_user_connections            | 0
                       |
| max_write_lock_count            | 4294967295
                       |
| multi_range_count               | 256
                       |
| myisam_data_pointer_size        | 6
                       |
| myisam_max_sort_file_size       | 2146435072
                       |
| myisam_recover_options          | OFF
                       |
| myisam_repair_threads           | 1
                       |
| myisam_sort_buffer_size         | 8388608
                       |
| myisam_stats_method             | nulls_unequal
                       |
| net_buffer_length               | 16384
                       |
| net_read_timeout                | 30
                       |
| net_retry_count                 | 10
                       |
| net_write_timeout               | 60
                       |
| new                             | OFF
                       |
| old_passwords                   | ON
                       |
| open_files_limit                | 1024
                       |
| optimizer_prune_level           | 1
                       |
| optimizer_search_depth          | 62
                       |
| pid_file                        | /mysqld.pid
                       |
| plugin_dir                      |
                       |
| port                            | 0
                       |
| preload_buffer_size             | 32768
                       |
| profiling                       | OFF
                       |
| profiling_history_size          | 15
                       |
| protocol_version                | 10
                       |
| query_alloc_block_size          | 8192
                       |
| query_cache_limit               | 1048576
                       |
| query_cache_min_res_unit        | 4096
                       |
| query_cache_size                | 0
                       |
| query_cache_type                | ON
                       |
| query_cache_wlock_invalidate    | OFF
                       |
| query_prealloc_size             | 8192
                       |
| range_alloc_block_size          | 4096
                       |
| read_buffer_size                | 131072
                       |
| read_only                       | OFF
                       |
| read_rnd_buffer_size            | 262144
                       |
| relay_log                       |
                       |
| relay_log_index                 |
                       |
| relay_log_info_file             | relay-log.info
                       |
| relay_log_purge                 | ON
                       |
| relay_log_space_limit           | 0
                       |
| rpl_recovery_rank               | 0
                       |
| secure_auth                     | OFF
                       |
| secure_file_priv                |
                       |
| server_id                       | 0
                       |
| skip_external_locking           | ON
                       |
| skip_networking                 | ON
                       |
| skip_show_database              | OFF
                       |
| slave_compressed_protocol       | OFF
                       |
| slave_load_tmpdir               | /tmp/
                       |
| slave_net_timeout               | 3600
                       |
| slave_skip_errors               | OFF
                       |
| slave_transaction_retries       | 10
                       |
| slow_launch_time                | 2
                       |
| socket                          | /mysql.sock
                       |
| sort_buffer_size                | 2097144
                       |
| sql_big_selects                 | ON
                       |
| sql_mode                        |
                       |
| sql_notes                       | ON
                       |
| sql_warnings                    | OFF
                       |
| ssl_ca                          |
                       |
| ssl_capath                      |
                       |
| ssl_cert                        |
                       |
| ssl_cipher                      |
                       |
| ssl_key                         |
                       |
| storage_engine                  | MyISAM
                       |
| sync_binlog                     | 0
                       |
| sync_frm                        | ON
                       |
| system_time_zone                | MSD
                       |
| table_cache                     | 64
                       |
| table_lock_wait_timeout         | 50
                       |
| table_type                      | MyISAM
                       |
| thread_cache_size               | 0
                       |
| thread_stack                    | 196608
                       |
| time_format                     | %H:%i:%s
                       |
| time_zone                       | SYSTEM
                       |
| timed_mutexes                   | OFF
                       |
| tmp_table_size                  | 33554432
                       |
| tmpdir                          | /tmp
                       |
| transaction_alloc_block_size    | 8192
                       |
| transaction_prealloc_size       | 4096
                       |
| tx_isolation                    | REPEATABLE-READ
                       |
| updatable_views_with_limit      | YES
                       |
| version                         | 5.0.67
                       |
| version_bdb                     | Sleepycat Software: Berkeley DB
4.1.24: (August  4, 2008) |
| version_comment                 | ALT Linux MySQL RPM
                       |
| version_compile_machine         | i586
                       |
| version_compile_os              | alt-linux-gnu
                       |
| wait_timeout                    | 28800
                       |
+---------------------------------+-----------------------------------------------------------+
239 rows in set (0.08 sec)

M.


Подробная информация о списке рассылки Sisyphus