Bug #499

Κλήσεις στο API με ελληνικά strings αποτυγχάνουν

Added by Vangelis Koukis almost 13 years ago. Updated almost 13 years ago.

Status:Closed Start date:05/10/2011
Priority:Medium Due date:
Assignee:Giorgos Verigakis % Done:

0%

Category:Cyclades API Spent time: -
Target version:v0.4

Description

Τουλάχιστον με το MySQL backend, κλήσεις στο API [π.χ. rename server] που έχουν ελληνικούς χαρακτήρες αποτυγχάνουν.
Ίσως χρειάζεται κάποιο option προς το MySQL backend.

History

#1 Updated by Vangelis Koukis almost 13 years ago

  • Target version set to v0.4

#2 Updated by Vangelis Koukis almost 13 years ago

Εδώ έκανα κάποιες δοκιμές, δεν έχω μπορέσει να βρω κάτι ακόμη.
Με MySQL:

ALTER DATABASE synnefo CHARACTER SET utf8;
ALTER TABLE db_virtualmachine CHARACTER SET='utf8'

η ΒΔ λέει ότι αυτό είναι το charset για το συγκεκριμένο table.
Αλλά το update συνεχίζει να σκάει με

Traceback (most recent call last):
File "/home/devel/synnefo/../synnefo/api/util.py", line 241, in wrapper
resp = func(request, *args, **kwargs)
File "/home/devel/synnefo/../synnefo/api/servers.py", line 242, in update_server_name
vm.save()
File "/usr/lib/pymodules/python2.6/django/db/models/base.py", line 456, in save
self.save_base(using=using, force_insert=force_insert, force_update=force_update)
File "/usr/lib/pymodules/python2.6/django/db/models/base.py", line 522, in save_base
rows = manager.using(using).filter(pk=pk_val)._update(values)
File "/usr/lib/pymodules/python2.6/django/db/models/query.py", line 497, in _update
return query.get_compiler(self.db).execute_sql(None)
File "/usr/lib/pymodules/python2.6/django/db/models/sql/compiler.py", line 866, in execute_sql
cursor = super(SQLUpdateCompiler, self).execute_sql(result_type)
File "/usr/lib/pymodules/python2.6/django/db/models/sql/compiler.py", line 732, in execute_sql
cursor.execute(sql, params)
File "/usr/lib/pymodules/python2.6/django/db/backends/util.py", line 15, in execute
return self.cursor.execute(sql, params)
File "/usr/lib/pymodules/python2.6/django/db/backends/mysql/base.py", line 86, in execute
return self.cursor.execute(query, args)
File "/usr/lib/pymodules/python2.6/MySQLdb/cursors.py", line 168, in execute
if not self._defer_warnings: self._warning_check()
File "/usr/lib/pymodules/python2.6/MySQLdb/cursors.py", line 82, in _warning_check
warn(w[-1], self.Warning, 3)
Warning: Incorrect string value: '\xCE\xA9\xCE\x9B\xCE\x9A...' for column 'name' at row 1

#3 Updated by Vangelis Koukis almost 13 years ago

  • Status changed from New to Closed

Παραθέτω παραπάνω πληροφορίες για το πρόβλημα που έστειλε ο Απόλλωνας:

Apollon Oikonomopoulos wrote:

Το βασικό πρόβλημα είναι ότι δεν έκανες CREATE DATABASE koko DEFAULT
CHARSET utf8; Από κει και έπειτα, το charset του table είναι απλά ένα
default για τα νέα columns, πράγμα το οποίο σημαίνει ότι και να κάνεις
ALTER TABLE τάδε CHARACTER SET utf8 δεν κάνεις convert τις υπάρχουσες
στήλες.

Πράγματι, έπρεπε να το είχα δει εδώ:

mysql> show create table db_virtualmachine;

όπου έλεγε:

`name` varchar(255) CHARACTER SET latin1 NOT NULL,

Για να γίνει αυτό πρέπει να δώσεις:

ALTER TABLE db_virtualmachine MODIFY name CHARACTER SET utf8;

Βασικά ήθελε όλο τον προσδιορισμό του column:

mysql> ALTER TABLE db_virtualmachine MODIFY name varchar(255) CHARACTER SET 'utf8' NOT NULL;

με αυτή την αλλαγή, σταματά να δηλώνει ρητά το CHARACTER SET στη λίστα του CREATE TABLE,
και πράγματι παίζει τέλεια.

Οπότε, αν καταλαβαίνω καλά, η αιτία του προβλήματος ήταν ότι η ΒΔ είχε δημιουργηθεί με λάθος default character set εξ αρχής.
Για παράδειγμα με εντολή όπως η:

CREATE DATABASE synnefo CHARACTER SET utf8

Το ticket μπορεί να κλείσει, δεν χρειάζεται αλλαγή στον κώδικα του Synnefo.

Also available in: Atom PDF