carter

carter

How to store complex strings in the database?

I am learning Elixir so please bear with me. I am trying to figure out how to store complex string into the database. Using an SVG file as an example (because it has a good mix of characters for testing), what is the best way to store it into the database (Postgres/mnesia etc.). I tried converting it into base64, using sigils etc. to no avail. All of them will find some fault with certain characters within the complex string. Is there another way to do this? Thanks in advance.

Most Liked

benwilson512

benwilson512

Author of Craft GraphQL APIs in Elixir with Absinthe

I would highly recommend storing this SVG information in an actual file, and then calling File.read!("path/to/file.svg"). Giant string literals like this are often a pain to deal with.

lud

lud

What is the tool that you use to write to the database ?

Because once you have your svg string in a variable, you should not have problems with special characters unless you are bulding raw sql like this: "INSERT INTO t VALUES('#{svg}');". This will not work.

But if you use a tool like Ecto, then your variable should fit into a text or binary column.

benwilson512

benwilson512

Author of Craft GraphQL APIs in Elixir with Absinthe

Hey @carter. Any time you have some sort of issue you’re running into, it helps if you can provide an example piece of data, as well as the code you tried to run, and the errors you ran into. It’s hard to help without this info.

carter

carter

Thank you for the reply. Here’s some examples of what I have tried and the error I get.

Base.encode64("<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="500px" height="500px" viewBox="0 0 500 500" enable-background="new 0 0 500 500" xml:space="preserve"> <path fill="none" stroke="#010101" stroke-width="0.5" stroke-linecap="round" stroke-linejoin="round" d="M274.767,96.803" /> <path fill="none" stroke="#010101" stroke-width="0.5" stroke-linecap="round" stroke-linejoin="round" d="M280.375,91.197" /> <path fill="none" stroke="#010101" stroke-width="0.5" stroke-linecap="round" stroke-linejoin="round" d="M280.375,91.197" /> <path fill="#EF3D25" d="M209.648,128.194c-0.841,0.113-17.177,2.8-19.153,11.005c-1.573,6.537,5.536,19.816,5.536,24.399 c4.862,0.901,9.493-2.008,13.98-3.388c4.489-1.379-3.46-11.632-2.862-15.131c0.598-3.499,2.973-1.707,4.496-3.207 c1.524-1.5,8.452-5.854,6.355-11.681C217.332,128.335,214.732,127.515,209.648,128.194z" /> <path fill="none" stroke="#010101" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" d="M213.15,141.376 c0,0-9.433,3.782-10.522,6.972" /> <path fill="none" stroke="#010101" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" d="M197.846,131.557 c3.877,0.45,8.595-0.095,10.682,1.903" /> </svg>")

** (SyntaxError) iex:1:103: keyword argument must be followed by space after: http:

Here’s another

~s(<?xml version="1.0" encoding="UTF-8" standalone="no"?> <svg xmlns:dc="http://purl.org/dc/elements/1.1/"     xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"     xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg"     xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"     xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" id="svg" version="1.1" width="48" height="48"     viewBox="0 0 48 48" sodipodi:docname="Amazon DynamoDB.svg" inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)">     <metadata id="metadata10">         <rdf:RDF>             <cc:Work rdf:about="">                 <dc:format>image/svg+xml</dc:format>                 <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" />             </cc:Work>         </rdf:RDF>     </metadata>     <defs id="defs8" />     <sodipodi:namedview pagecolor="#ffffff" bordercolor="#666666" borderopacity="1" objecttolerance="10"         gridtolerance="10" guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2"         inkscape:window-width="3696" inkscape:window-height="2032" id="namedview6" showgrid="false" inkscape:zoom="0.59"         inkscape:cx="200" inkscape:cy="200" inkscape:window-x="144" inkscape:window-y="54" inkscape:window-maximized="1"         inkscape:current-layer="svg" />     <g id="svgg" transform="scale(0.12)">         <path id="path0"             d="M 0,200 V 400 H 200 400 V 200 0 H 200 0 v 200 m 389.6,0 V 390.4 H 199.6 9.6 V 200 9.6 h 190 190 V 200 M 173.6,61 c 0,0.51 -1.044,0.6 -7,0.6 -4.4,0 -7,0.149 -7,0.4 0,0.24 -1.6,0.4 -4,0.4 -3.289,0 -4,0.107 -4,0.6 0,0.489 -0.667,0.6 -3.6,0.6 -2.133,0 -3.6,0.163 -3.6,0.4 0,0.222 -1.067,0.4 -2.4,0.4 -1.867,0 -2.4,0.133 -2.4,0.6 0,0.453 -0.489,0.6 -2,0.6 -1.1,0 -2,0.18 -1.6,-0.6 -0.88,0 -1.6,-0.18 -1.6,-0.4 0,-0.22 -0.45,-0.4 -1,-0.4 -0.622,0 -1,-0.227 -1,-0.6 0,-0.467 -0.533,-0.6 -2.4,-0.6 -2.265,0 -2.4,0.054 -2.4,0.957"             inkscape:connector-curvature="0" style="fill:#000000;fill-rule:evenodd;stroke:none" />         <path id="path1" d="" inkscape:connector-curvature="0" style="fill:#ffffff;fill-rule:evenodd;stroke:none" />     </g> </svg>)

** (SyntaxError) iex:1:762: keyword argument must be followed by space after: http:

RudManusachi

RudManusachi

I second Ben’s recommendation to read from file.

Otherwise, you could try heredocs… (as long as string doesn’t contain and new line followed by whitespaces and """)

string = """
<?xml ..>
"""

Where Next?

Popular in Questions Top

JDanielMartinez
Hi! May someone helps me, please! I have two apps into an umbrella project: the first one is Database, which manages queries, and the se...
New
shahryarjb
Hello, I get Persian date from my client and convert it to normal calendar like this: def jalali_string_to_miladi_english_number(persi...
New
pmjoe
I have a relationship of love and hate with Elixir. Lots of things are just absolutely right, but there are some things that are kind of ...
New
tduccuong
Hi, is there any work on GUI with Elixir, that is similar to Electron/Javascript? My idea is to bundle Phoenix and BEAM into a single se...
New
Werner
Hi, I’m using Ubuntu 18.04 and after updating to OTP-24.0 yesterday i have this warning when I run “mix local.hex”: 14:57:30.512 [warn] ...
New
mcarvalho
What is the difference between System.get_env and Application.get_env? For example, what are best practices to use one versus another.
New
rms.mrcs
Hi, I need to transform a list of numbers into a map where the keys are the indexes and the values are the original values of the list....
New
Fl4m3Ph03n1x
Background Let’s assume I have a typical GenServer that receives messages as requests, does some operation in a DB and returns responses....
New
fayddelight
I tried installing elixir 1.11.2 erlang 23.3.4 via asdf in my zsh shell. Enabled the versions locally and globally. When I list them ...
New
WestKeys
Currently suffering from paralysis by [HTTP client] analysis. This is rather unusual in Elixirland as there tends to be consensus on the ...
New

Other popular topics Top

chrismccord
Phoenix 1.4.0 released Phoenix 1.4 is out! This release ships with exciting new features, most notably with HTTP2 support, improved deve...
688 30048 115
New
yurko
Here are few pieces of (common) Linux knowledge that we use for reasonably small one server apps. We use Ubuntu but this should work for ...
New
senggen
Erlang/OTP 25 [erts-13.2.2] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1] 15:22:35.803 [error] gen_event {lager_file_backend...
New
pmjoe
I have a relationship of love and hate with Elixir. Lots of things are just absolutely right, but there are some things that are kind of ...
New
itssasanka
Hi all, Trying to get some more clarity over utc_datetime and naive_datetime for Ecto: https://hexdocs.pm/ecto/Ecto.Schema.html#module-...
New
aalberti333
As the title describes, I’m trying to run Enum.map() over a list of key/value pairs, where the value is a map. My data looks like this: ...
New
axelson
This post is a wiki (feel free to hit the edit button near the bottom right of this post to add your own changes!) This post collects co...
239 45766 226
New
hariharasudhan94
I would like to know what is the best IDE for elixir development?
New
stefanluptak
Hello everybody, usually, I use a 29" ultra-wide monitor for VSCode which can easily accomodate explorer (files panel) + file with code ...
New
Qqwy
Original source of discussion: This topic on the Pragmatic Programmers' Functional Web Development with Elixir, OTP, and Phoenix forum. ...
New

We're in Beta

About us Mission Statement