Return empty value with big text column

Bug #661334 reported by _JulienH
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
MySQL Connector/Python
Invalid
Undecided
Unassigned

Bug Description

Hi Geert,

In my database i have a table who have a text column with a big text value, for example 78000 characters.
When i do a select query with this table and this column, the result is empty.

ps: sorry for my english

Julien

Revision history for this message
Geert JM Vanderkelen (geertjmvdk) wrote :

Hello Julien,

Do you have a test case which shows the problem? What version of MySQL Connector/Python?

>>> cnx = mysql.connector.connect(database='test')
>>> cur = cnx.cursor()
>>> cur.execute("SELECT REPEAT('a',78000)")
-1
>>> row = cur.fetchone()
>>> len(row[0])
78000
>>> print row[0][0:100]
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

And with a table wich c1 LONGTEXT:

>>> cur.execute("SELECT c1 FROM t1")
-1
>>> len(row[0])
78000

Revision history for this message
_JulienH (julienhany) wrote :

Hello Geert,

I use Python 3.1 and Mysql 5.1.36

I'm sorry it's not the character "78000" but a big text with 78000 characters, a very big text. For my test i copy a big text of wikipedia :)

Revision history for this message
_JulienH (julienhany) wrote :
Download full text (3.9 KiB)

Oops i read to fast.

I use TEXT, not LONGTEXT

I use this text :
fiche = """En 1463, ce fut une missive de Théodora adressée à son oncle David, assigné à résidence à Andrinople, qui donna à Mehmed II l'occasion de se débarrasser de cet hôte encombrant. Celle-ci lui demandait en effet par ce courrier de bien vouloir lui confier l'un de ses fils (ou, à défaut, son neveu) afin qu'il résidât avec elle à la cour d'Uzun Hasan[12]. Pour Mehmed II, c'était à l'évidence un complot destiné à susciter un prétendant à la reconquête du Pont avec l'appui des Turkmènes d’Ak Koyunlu[13]. Prenant prétexte de ce soupçon de trahison, David, ses trois fils et un neveu furent jetés aux fers, puis exécutés le 1er novembre de cette même année 1463[14].

C'est à partir des années 1470 que la figure de Théodora sortit pour la dernière fois de l'ombre, mais, semble-t-il au regard de l'historiographie récente, d'une façon moins directe qu'on l'a cru autrefois. Trébizonde vaincue, Uzun Hasan n'en demeurait pas moins pour Mehmed II son plus grand et dangereux rival en Asie mineure. En outre, depuis la chute de Nègrepont, en 1470, la République de Venise était résolue à changer sa politique vis-à-vis de l'Empire ottoman et de cesser de temporiser. Des pourparlers s'engagèrent ainsi entre la Sérénissime et la Horde du Mouton Blanc en vue de la création d'une alliance anti-ottomane. À la suite d'une source tardive, il a longtemps été prêté à Théodora une sœur prénommée Valenza qui aurait épousé le régent du duché de Naxos, Nicolò Crispo[4], et qui aurait ainsi servi d'intermédiaire entre les Italiens et Uzun Hasan. L'étude attentive de la chronologie montre cependant que l'existence d'une telle union n'est que très peu vraisemblable[15]. Toujours est-il que le Vénitien Caterino Zeno dont on a voulu faire un neveu de Théodora parvint à Tabriz, à la cour d'Uzun Hasan qui était entre-temps devenu le maître de la Perse occidentale après sa victoire sur la Horde du Mouton Noir en 1467[16]. Les tractations portèrent essentiellement sur l'opportunité d'une action concertée contre les Ottomans et la livraison d'armes à feu par les Vénitiens aux Turkmènes qui n'en possédaient pas. Les hostilités s'engagèrent en 1471 sans que Venise n'entrât véritablement en action, et surtout sans que les armes ne fussent livrées à Hasan : cela se solda par un désastre pour ce dernier, battu à Kereli en 1472 puis de façon décisive à la bataille d'Otlukbeli l'année suivante, ce qui mit fin à ses ambitions anatoliennes, tandis qu'Alexis Comnène, un neveu du défunt David II, qui s'était élancé avec l'appui des Géorgiens à la reconquête de Trébizonde, était lui aussi repoussé[17]. Il est finalement, dans cet épisode, très difficile de faire la part de l'influence de Théodora, Uzun Hasan ayant toutes les raisons d'entrer tôt ou tard en conflit avec Mehmed II[18].
Pour l'Empire comnène, une telle alliance avec les puissants Turkmènes du Mouton Blanc ne pouvait que paraître salutaire. Avec la conquête de Constantinople en 1453, Trébizonde était devenue l'ultime bastion du monde byzantin, grec et orthodoxe. Depuis lors, les Turcs ottomans rognaient de plus en plus sur son territoire, et avaient tenté à p...

Read more...

Revision history for this message
Geert JM Vanderkelen (geertjmvdk) wrote :

Yes, but which version of MySQL Connector/Python ?

 shell> python -c "import mysql.connector as db; print(db.__version__)"

Same test case as I posted earlier, getting a text with 78000 characters works.
Which text are you copying and how? Are you download the Wikipedia database?

Can you show the code which is having an empty result?

Revision history for this message
Geert JM Vanderkelen (geertjmvdk) wrote :

Works well with both v0.1 and v0.2 (and Python v3.1:

def main():
    cnx = mysql.connector.connect(database='test')
    print(mysql.connector._version.version)
    cur = cnx.cursor()
    cur.execute("DROP TABLE t1")
    cur.execute("CREATE TABLE t1 (c1 TEXT) ENGINE=InnoDB")
    cur.execute("INSERT INTO t1 (c1) VALUES (%s)", (FICHE,))
    cnx.commit()
    cur.execute("SELECT c1 FROM t1")
    row = cur.fetchone()
    print(row[0])
    cur.close()
    cnx.close()

Revision history for this message
_JulienH (julienhany) wrote :

It's the version 0.2.0, i just copy/past a text for my example. Chartest UTF8.
I use your code "Fetching rows as dictionaries with MySQL Connector/Python" of your blog

I have a table "animals" with one of a column is "spec" with a big text.
If i do:
SELECT * FROM animals
return: empty

SELECT id FROM animals
return: id

I put a small text in "spec"
SELECT * FROM animals
return: all

Revision history for this message
_JulienH (julienhany) wrote :

The engine table is MyISAM.
I restart all of my tests and it's don't work for me :/

Revision history for this message
Geert JM Vanderkelen (geertjmvdk) wrote :

Julien,

Using the code from email #5: it just works. Also with the MySQLDictCursor from my blog.
I would like the source code which shows the problem. Please attach it.

Cheers,
Geert

Revision history for this message
_JulienH (julienhany) wrote :

Hi,
I try your code and it works, but if i had an other key in my table and i do a SELECT *, it's not work :

cnx = mysql.connector.connect(..., charset='utf8')
  print(mysql.connector._version.version)
  cur = cnx.cursor()
  cur.execute("DROP TABLE t1")
  cur.execute("CREATE TABLE t1 (idPrim INT NOT NULL AUTO_INCREMENT, fiche TEXT, PRIMARY KEY (`idPrim`)) ENGINE=MyISAM")
  cur.execute("INSERT INTO t1 (fiche) VALUES (%s)", (FICHE,))
  cnx.commit()
  cur.execute("SELECT * FROM t1")
  row = cur.fetchone()
  print(row[0])
  cur.close()
  cnx.close()

return : 1

cur.execute("SELECT fiche FROM t1")
return : the text

print(mysql.connector._version.version)
(0, 2, 0, 'devel', 272)

Revision history for this message
Geert JM Vanderkelen (geertjmvdk) wrote :

Julien,

I need the exact table and the code you are using (or a simple test case).

Geert

Revision history for this message
Geert JM Vanderkelen (geertjmvdk) wrote :

We didn't get any follow up, but it would be good to try Connector/Python v0.3.

Changed in myconnpy:
status: New → Incomplete
Changed in myconnpy:
status: Incomplete → Invalid
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.